前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringQuartz 实现定时任务调度

SpringQuartz 实现定时任务调度

作者头像
用户1518699
发布2018-09-12 15:32:48
1.9K0
发布2018-09-12 15:32:48
举报
文章被收录于专栏:nice_每一天nice_每一天

最近公司新项目需要用到定时器,于是研究了一下发现:

Spring中使用Quartz有两种方式实现:

第一种是任务类继承QuartzJobBean

第二种则是在配置文件里定义任务类和要执行的方法,类和方法仍然是普通类。

很显然,第二种方式远比第一种方式来的灵活。

jar依赖

如果是maven项目

代码语言:javascript
复制
<!-- Spring-Quartz实现定时任务调度 -->
        <dependency>  
            <groupId>org.quartz-scheduler</groupId>  
            <artifactId>quartz</artifactId>  
            <version>1.8.5</version>  
        </dependency>  

非maven项目,下面是所需要的jar包

代码语言:javascript
复制
quartz-1.8.5.jar
commons-logging.jar
spring-core-3.0.5.RELEASE.jar
spring-beans-3.0.5.RELEASE.jar
spring-context-3.0.5.RELEASE.jar
spring-context-support-3.0.5.RELEASE.jar
spring-asm-3.0.5.RELEASE.jar
spring-expression-3.0.5.RELEASE.jar
spring.transaction-3.0.5.RELEASE.jar
spring-web-3.0.5.RELEASE.jar

第一种任务类继承QuartzJobBean

二种方式远比第一种方式来的灵活。

1.定义java类继承QuartzJobBean

代码语言:javascript
复制
 1 package com.zhihuishu.qa.quartz;
 2 
 3 import org.quartz.JobExecutionContext;
 4 import org.quartz.JobExecutionException;
 5 import org.springframework.scheduling.quartz.QuartzJobBean;
 6 
 7 public class SpringQtz extends QuartzJobBean {
 8 
 9     /**
10     * 要调度的具体任务
11     */ 
12     @Override 
13     protected void executeInternal(JobExecutionContext context) 
14     throws JobExecutionException { 
15       System.out.println("继承QuartzJobBean定时任务执行中…"); 
16     }  
17 
18 }

2.定义spring配置文件 beans-quartz.xml

代码语言:javascript
复制
 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" xmlns:context="http://www.springframework.org/schema/context"
 4     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
 5     xsi:schemaLocation="http://www.springframework.org/schema/beans
 6             http://www.springframework.org/schema/beans/spring-beans.xsd
 7                http://www.springframework.org/schema/context 
 8             http://www.springframework.org/schema/context/spring-context.xsd
 9             http://www.springframework.org/schema/aop 
10             http://www.springframework.org/schema/aop/spring-aop.xsd
11             http://www.springframework.org/schema/tx 
12             http://www.springframework.org/schema/tx/spring-tx.xsd">
13 
14 <!-- spring配置文件中配置作业类JobDetailBean -->
15     <bean name="springQtz" class="org.springframework.scheduling.quartz.JobDetailBean"> 
16     <property name="jobClass" value="com.zhihuishu.qa.quartz.SpringQtz" /> 
17     <property name="jobDataAsMap"> 
18        <map> 
19            <entry key="timeout" value="0" /> 
20        </map> 
21     </property> 
22     </bean>   
23     
24     
25     
26 <!-- 配置作业调度的触发方式(触发器) -->
27     
28     <!-- 每隔多少时间执行一次 -->
29     <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> 
30     <property name="jobDetail" ref="springQtz" /> 
31     <property name="startDelay" value="0" /> <!-- 调度工厂实例化后,经过0秒开始执行调度  -->
32     <property name="repeatInterval" value="2000" /><!-- 每2秒调度一次 --> 
33     </bean>  
34     
35     <!-- 某个时间点执行一次 -->
36     <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> 
37     <property name="jobDetail" ref="springQtz" /> 
38     <!-- 每天12:00运行一次 --> 
39     <property name="cronExpression" value="0 0 19 * * ? *" /> 
40     </bean>  
41     
42 <!--     配置调度工厂 -->
43 
44     <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
45     <property name="triggers"> 
46     <list> 
47     <ref bean="simpleTrigger" /> 
48     </list> 
49     </property> 
50     </bean>  
51     
52 </beans>

SpringQuartz 时间配置,使用在线Cron表达式生成器 http://cron.qqe2.com/

执行结果:

第二种在配置文件里定义任务类和要执行的方法,类和方法仍然是普通类。

第二种方式远比第一种方式来的灵活。

1.定义java普通类

代码语言:javascript
复制
 1 package com.zhihuishu.qa.quartz;
 2 
 3 public class SpringQtz2 {
 4 
 5     /**
 6     * 要调度的具体任务 (方法名任意)
 7     */ 
 8     protected void executeTask(){ 
 9       System.out.println("普通类定时任务执行中…"); 
10     }  
11     
12 }

2.定义spring配置文件 beans-quartz2.xml

代码语言:javascript
复制
 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" xmlns:context="http://www.springframework.org/schema/context"
 4     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
 5     xsi:schemaLocation="http://www.springframework.org/schema/beans
 6             http://www.springframework.org/schema/beans/spring-beans.xsd
 7                http://www.springframework.org/schema/context 
 8             http://www.springframework.org/schema/context/spring-context.xsd
 9             http://www.springframework.org/schema/aop 
10             http://www.springframework.org/schema/aop/spring-aop.xsd
11             http://www.springframework.org/schema/tx 
12             http://www.springframework.org/schema/tx/spring-tx.xsd">
13 
14     <!-- 定义目标bean和bean中的方法 -->
15     <bean id="SpringQtzBean" class="com.zhihuishu.qa.quartz.SpringQtz2" />
16     <!-- 方式二:使用MethodInvokingJobDetailFactoryBean,任务类可以不实现Job接口,通过targetMethod指定调用方法 -->
17     <bean id="SpringQtzJobMethod"
18         class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
19         <property name="targetObject">
20             <ref bean="SpringQtzBean" />
21         </property>
22         <property name="targetMethod">  <!-- 要执行的方法名称 -->
23             <value>executeTask</value>
24         </property>
25     </bean>
26 
27     <!-- 配置作业调度的触发方式(触发器) -->
28 
29     <!-- 每隔多少时间执行一次 -->
30     <bean id="simpleTrigger2" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
31         <property name="jobDetail" ref="SpringQtzJobMethod" />
32         <property name="startDelay" value="0" /> <!-- 调度工厂实例化后,经过0秒开始执行调度 -->
33         <property name="repeatInterval" value="2000" /><!-- 每2秒调度一次 -->
34     </bean>
35 
36     <!-- 某个时间点执行一次 -->
37     <bean id="cronTrigger2" class="org.springframework.scheduling.quartz.CronTriggerBean">
38         <property name="jobDetail" ref="SpringQtzJobMethod" />
39         <!-- 每天12:00运行一次 -->
40         <property name="cronExpression" value="0 0 19 * * ? *" />
41     </bean>
42 
43     <!-- 配置调度工厂 -->
44     <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
45         <property name="triggers">
46             <list>
47                 <ref bean="simpleTrigger2" />
48             </list>
49         </property>
50     </bean>
51 
52 </beans>

SpringQuartz 时间配置,使用在线Cron表达式生成器 http://cron.qqe2.com/

执行结果:

参考资料来源:http://blog.csdn.net/u013314786/article/details/51331554

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-12-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档