文章分类:Java编程
使用spring整合quartz实现定时执行任务,是很简单的事,大体需要几个步骤:
1:定义job,即要在项目定时执行的业务逻辑(定时同步数据库,定时汇总数据。。。。)
a:一个继承QuartzJobBean了的类
b:普通的业务逻辑类
2:定义trigger,即触发规则(两种方式)
a:设定间隔时间执行
b:指定具体的时间执行 年 月 日 时 分 秒 (反向定义)
3:定义任务调度
后两步都是在spring中配置完成的
小例子:
Job1:
Java代码
1. package com.tigerlee.schedule.demo;
2.
3. import org.quartz.JobExecutionContext;
4. import org.quartz.JobExecutionException;
5. import org.springframework.scheduling.quartz.QuartzJobBean;
6.
7. /**
8. *
9. * @author TigerLee
10. * @date Oct 20, 2010
11. * @desc 通过监听继承了类QuartzJobBean的类来实现定时任务
12. */
13. public class HandleReporterJob extends QuartzJobBean{
14. //这个属性可以通过spring配置传递过值
15. public String jobName;
16.
17. @Override
18. protected void executeInternal(JobExecutionContext arg0)
19. throws JobExecutionException {
20.
21. System.out.println("报表:"+getJobName()+"开始执行...");
22. //处理报表的实际业务逻辑
23.
24. }
25.
26. public String getJobName() {
27. return jobName;
28. }
29.
30. public void setJobName(String jobName) {
31. this.jobName = jobName;
32. }
33.
34.
35.
36.
37.
38. }
package com.tigerlee.schedule.demo;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
/**
*
* @author TigerLee
* @date Oct 20, 2010
* @desc 通过监听继承了类QuartzJobBean的类来实现定时任务
*/
public class HandleReporterJob extends QuartzJobBean{
//这个属性可以通过spring配置传递过值
public String jobName;
@Override
protected void executeInternal(JobExecutionContext arg0)
throws JobExecutionException {
System.out.println("报表:"+getJobName()+"开始执行...");
//处理报表的实际业务逻辑
}
public String getJobName() {
return jobName;
}
public void setJobName(String jobName) {
this.jobName = jobName;
}
}
Job2:
Java代码
1. package com.tigerlee.schedule.demo;
2. /**
3. *
4. * @author TigerLee
5. * @date Oct 20, 2010
6. * @desc 执行定时任务的业务逻辑
7. */
8. public class HandleDBJob {
9. /**
10. * 要定时执行的业务逻辑
11. */
12. public void handleDB(){
13. System.out.println("开始处理数据库...");
14. }
15.
16.
17. }
package com.tigerlee.schedule.demo;
/**
*
* @author TigerLee
* @date Oct 20, 2010
* @desc 执行定时任务的业务逻辑
*/
public class HandleDBJob {
/**
* 要定时执行的业务逻辑
*/
public void handleDB(){
System.out.println("开始处理数据库...");
}
}
spring 配置文件:
Java代码
1. <?xml version="1.0" encoding="UTF-8"?>
2. <beans xmlns="http://www.springframework.org/schema/beans"
3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4. xmlns:aop="http://www.springframework.org/schema/aop"
5. xmlns:tx="http://www.springframework.org/schema/tx"
6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
7. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
8. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
9. <!-- 定义一个job (第一种方式) -->
10. <bean name="reporterJob"
11. class="org.springframework.scheduling.quartz.JobDetailBean">
12. <property name="jobClass"
13. value="com.tigerlee.schedule.demo.HandleReporterJob">
14. </property>
15. <property name="jobDataAsMap">
16. <map>
17. <entry key="jobName" value="季度总结" />
18. </map>
19. </property>
20. </bean>
21.
22. <bean id="handleDbJob" class="com.tigerlee.schedule.demo.HandleDBJob"></bean>
23.
24. <!-- 定义第二个job 指定执行的方法 -->
25. <bean id="handleDB"
26. class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
27. <property name="targetObject" ref="handleDbJob" />
28. <property name="targetMethod" value="handleDB" />
29. <!-- 设置任务不并发执行 -->
30. <property name="concurrent" value="false" />
31. </bean>
32.
33.
34. <!-- 定义一个trigger(简单的) -->
35. <bean id="simpleTrigger"
36. class="org.springframework.scheduling.quartz.SimpleTriggerBean">
37. <!-- 指定要执行的job -->
38. <property name="jobDetail" ref="reporterJob"></property>
39. <!-- 设置延迟执行时间 毫秒 -->
40. <property name="startDelay" value="10000" />
41. <!-- 设置间隔时间 毫秒 -->
42. <property name="repeatInterval" value="50000" />
43. </bean>
44.
45. <!-- 定义第二个trigger 指定具体执行的时间 -->
46. <bean id="cronTrigger"
47. class="org.springframework.scheduling.quartz.CronTriggerBean">
48. <property name="jobDetail" ref="handleDB" />
49. <!-- 定义執行時間-->
50. <property name="cronExpression" value="0 21 22 * * ?" />
51. </bean>
52.
53.
54. <!-- 定义任务调度器 -->
55. <bean
56. class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
57. <property name="triggers">
58. <list>
59. <ref bean="simpleTrigger" />
60. <ref bean="cronTrigger"/>
61. </list>
62. </property>
63. </bean>
64.
65. </beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<!-- 定义一个job (第一种方式) -->
<bean name="reporterJob"
class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass"
value="com.tigerlee.schedule.demo.HandleReporterJob">
</property>
<property name="jobDataAsMap">
<map>
<entry key="jobName" value="季度总结" />
</map>
</property>
</bean>
<bean id="handleDbJob" class="com.tigerlee.schedule.demo.HandleDBJob"></bean>
<!-- 定义第二个job 指定执行的方法 -->
<bean id="handleDB"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="handleDbJob" />
<property name="targetMethod" value="handleDB" />
<!-- 设置任务不并发执行 -->
<property name="concurrent" value="false" />
</bean>
<!-- 定义一个trigger(简单的) -->
<bean id="simpleTrigger"
class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<!-- 指定要执行的job -->
<property name="jobDetail" ref="reporterJob"></property>
<!-- 设置延迟执行时间 毫秒 -->
<property name="startDelay" value="10000" />
<!-- 设置间隔时间 毫秒 -->
<property name="repeatInterval" value="50000" />
</bean>
<!-- 定义第二个trigger 指定具体执行的时间 -->
<bean id="cronTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="handleDB" />
<!-- 定义執行時間-->
<property name="cronExpression" value="0 21 22 * * ?" />
</bean>
<!-- 定义任务调度器 -->
<bean
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="simpleTrigger" />
<ref bean="cronTrigger"/>
</list>
</property>
</bean>
</beans>
测试启动容器类:
Java代码
1. package com.tigerlee.schedule.demo;
2.
3. import org.springframework.context.ApplicationContext;
4. import org.springframework.context.support.ClassPathXmlApplicationContext;
5.
6. public class Test {
7.
8. public static void main(String[] args){
9.
10. ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
11.
12.
13. }
14. }
package com.tigerlee.schedule.demo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
}
}
附上具体时间的定义规则:
Java代码
1. 0 0 12 * * ?---------------在每天中午12:00触发
2. 0 15 10 ? * *---------------每天上午10:15 触发
3. 0 15 10 * * ?---------------每天上午10:15 触发
4. 0 15 10 * * ? *---------------每天上午10:15 触发
5. 0 15 10 * * ? 2005---------------在2005年中的每天上午10:15 触发
6. 0 * 14 * * ?---------------每天在下午2:00至2:59之间每分钟触发一次
7. 0 0/5 14 * * ?---------------每天在下午2:00至2:59之间每5分钟触发一次
8. 0 0/5 14,18 * * ?---------------每天在下午2:00至2:59和6:00至6:59之间的每5分钟触发一次
9. 0 0-5 14 * * ?---------------每天在下午2:00至2:05之间每分钟触发一次
10. 0 10,44 14 ? 3 WED---------------每三月份的星期三在下午2:00和2:44时触发
11. 0 15 10 ? * MON-FRI---------------从星期一至星期五的每天上午10:15触发
12. 0 15 10 15 * ?---------------在每个月的每15天的上午10:15触发
13. 0 15 10 L * ?---------------在每个月的最后一天的上午10:15触发
14. 0 15 10 ? * 6L---------------在每个月的最后一个星期五的上午10:15触发
15. 0 15 10 ? * 6L 2002-2005---------------在2002, 2003, 2004 and 2005年的每个月的最后一个星期五的上午10:15触发
16. 0 15 10 ? * 6#3---------------在每个月的第三个星期五的上午10:15触发
17. 0 0 12 1/5 * ?---------------从每月的第一天起每过5天的中午12:00时触发
18. 0 11 11 11 11 ?---------------在每个11月11日的上午11:11时触发.
分享到:
相关推荐
本文介绍Quartz框架的使用,以及如何整合到Spring。 Spring版本号:4.2.1.RELEASE Quartz版本号:2.21 相关文章地址:
下面小编就为大家带来一篇spring和quartz整合,并简单调用(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
详细描述了quartz的使用方式和spring通过xml依赖注入结合实现任务的定时配置.配备了各个运用文档.
基于boot+Quartz定时任务调度平台 kafka 基于Redis分布式限流组件设计与使用实例 发送邮件 dalgen工具 多数据源 使用jedis客户端整合redis 基于位图实现布隆过滤器 基于redis 实现的简单队列 整合redission 客户端 ...
12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用服务器...
12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用...
12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用...
12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用...
12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用...
7. Quartz定时调度任务集成(直接通过配置即可) 8. Httpclient破解验证码,登陆联通充值平台 9. 汉字、英文拆分、可以用作文档关键字搜索等。 10. Base64图片处理,支持PC,Android,IOS 11. Service Socket 、...