Quartz与Spring集成的两种方法示例
作者:花弄影1521 发布时间:2022-05-22 05:15:41
标签:Quartz,集成,Spring
Quartz与Spring集成方式:
1.MethodInvokeJobDetailFactoryBean
2.JobDetailBean
下面分别介绍这两种方式。
1.MethodInvokeJobDetailFactoryBean
1)创建一个Job类,此类不需要实现任何接口,不需要继承任何类
public class MyJobTest {
public void execute(){
System.out.println("正在执行quartz任务的一个方法。。。");
}
}
2)配置XML
<!-- 第一种集成方式:MethodInvokingJobDetailFactoryBean,并且job类,直接是pojo类,与普通类没有区别 -->
<!-- 定义具体的任务类 -->
<bean id="myJob" class="com.high.quartz.MyJobTest" />
<!-- 定义JobDetail -->
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 目标类 -->
<property name="targetObject" ref="myJob" />
<!-- 目标类中要执行的方法,这个参数是必须的 -->
<property name="targetMethod" value="execute" />
</bean>
<!-- 定义simpleTrigger触发器 -->
<bean id="simpleTaskTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
<!-- 延迟10秒启动,然后每隔3秒执行一次,一共执行8次 -->
<property name="jobDetail" ref="jobDetail" />
<property name="repeatCount" value="8" />
<property name="startDelay" value="10000" />
<property name="repeatInterval" value="3000" />
</bean>
<!-- 定义cronTrigger触发器 -->
<bean id="cronTaskTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="jobDetail" />
<!-- 下午4点25分开始,每5秒执行一次 -->
<property name="cronExpression" value="0/5 25 16 ? * *" />
</bean>
<!-- 设置调度 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<ref bean="cronTaskTrigger" />
</property>
</bean>
2.JobDetailBean
1)需要继承QuartzJobBean类或者实现Job方法
public class MyJobBeanTest extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
System.out.println("测试Quartz:Hello Quartz");
}
}
2)配置XML
<!-- 第二种配置方式,需要继承QuartzJobBean -->
<!-- jobClass关联到一个继承自QuartzJobBean的类,它实现了Quartz作业接口。调用到这个作业的时候,它的executeInternal将被执行。-->
<bean id="jobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="com.high.quartz.MyJobBeanTest" />
<property name="durability" value="true" />
</bean>
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
<property name="jobDetail" ref="jobDetail" />
<property name="startDelay" value="3000" />
<property name="repeatInterval" value="2000" />
</bean>
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="jobDetail" />
<property name="cronExpression" value="0/5 46 16 ? * *" />
</bean>
<!-- 总管理类,如果lazy-init='false' 那么容器启动就会指定调度程序 -->
<bean id="startQuartz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!-- 管理trigger -->
<property name="triggers">
<list>
<ref bean="cronTrigger" />
</list>
</property>
</bean>
3.两种集成方式的简单说明
1)使用MethodInvokeJobDetailFactoryBean则需要指定targetObject(任务实例)和targetMethod(实例中要执行的方法)
2)使用QuartzJobBean,需要继承。
前者优点是无侵入,业务逻辑简单,一目了然,缺点是无法持久化。
从我使用的经验来说,我更推荐的第二种,其中一个很重要的原因就是因为定时任务中注入相关Service的时候,后者可以直接注入,而前者还需要进行Scheduler的替换修改。
来源:https://blog.csdn.net/huanongying123/article/details/76400975


猜你喜欢
- 一、Servlet简介Servlet是sun公司提供的一门用于开发动态web资源的技术。Sun公司在其API中提供了一个servlet接口,
- 一、ThreadPool概述提供一个线程池,该线程池可用于执行任务、发送工作项、处理异步 I/O、代表其他线程等待以及处理计时器。创建线程需
- 此时希望用户不能通过键盘alt+F4来结束程序及通过Win的组合键对窗口进行操作。我在网上搜索了一下,采用全局键盘钩子的方法可以做到屏蔽用户
- 前言今天主要讲的是如何把通过接口获取到的Xml数据转换成(反序列化)我们想要的实体对象,当然Xml反序列化和Json反序列化的方式基本上都是
- 本文实例讲述了本文章介绍了在c#,vb.net,sql中来判断指定日期是否为闰年的方法。分享给大家供大家参考。具体实现方法如下:C#代码如下
- 前言:在本文中,我们将详细讨论Java中的一个核心概念——线程的生命周期。我们将使用一个快速的图解,
- 一、Spring Boot任务线程池线程池的作用防止资源占用无限的扩张调用过程省去资源的创建和销毁所占用的时间在高并发环境下,不断的分配新资
- 这篇文章主要介绍了Springboot创建子父工程过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
- maven运行依赖于 JAVA_HOME如果各位还没有配置 JAVA_HOME,可以参考我的另一篇博客 JDK环境变量配置 JDK 环境变量
- SpringBoot切面拦截@PathVariable参数及抛出异常的全局处理微信小程序的接口验证防止非法请求,登录的时候获取openId生
- 最近因项目需要,需要跨域请求访问数据。跨域访问是指什么?[跨域]:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器
- 传统方式克隆羊问题现在有一只羊 tom,姓名为: tom,年龄为:1,颜色为:白色,请编写程序创建和 tom羊属性完全相同的10只羊。传统方
- 对开场白没兴趣?好吧,我们直接切入正题,下面介绍10个C#编程和Visual Studio IDE使用技巧。1、Environment.Ne
- 如果没有安装过maven,是用的idea自带的maven,那就是idea的安装目录下 /plugins/maven/lib/maven3这个
- 就是仿照现在扫一扫的形式,周围是半透明的遮挡,然后中间是全透明的,拍摄后只截取框内的内容查了很多博客,实现起来真的太复杂了,本人比较怕麻烦所
- SkiaSharp 自绘弹幕效果框架使用.NET60;Visual Studio 2022;项目使用 MIT 开源许可协
- 一、 进程 简单来说,进程是对资源的抽象,是资源的容器,
- 大家使用Android的原生UI都知道,Android的Activity跳转就是很生硬的切换界面。其实Android的Activity跳转可
- 当异常被抛出,通常方法的执行将作一个陡峭的非线性的转向。依赖于方法是怎样编码的,异常甚至可以导致方法过早返回。这在一些方法中是一个问题。例如
- 教程展示了如何在Spring应用程序中使用GenericApplicationContext 。在该示例中,我们创建了一个Spring Bo