`
qiuyujia
  • 浏览: 171015 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

spring整合quartz实现定时任务实例--学习

阅读更多

文章分类: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时触发.­  
分享到:
评论

相关推荐

    Spring整合Quartz定时任务实例

    本文介绍Quartz框架的使用,以及如何整合到Spring。 Spring版本号:4.2.1.RELEASE Quartz版本号:2.21 相关文章地址:

    spring和quartz整合,并简单调用(实例讲解)

    下面小编就为大家带来一篇spring和quartz整合,并简单调用(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    应用实例 和 整合文档实现任务的自动调度

    详细描述了quartz的使用方式和spring通过xml依赖注入结合实现任务的定时配置.配备了各个运用文档.

    spring-boot-example:spring boot 相关实例合集,各Demo工程介绍详见README.md

    基于boot+Quartz定时任务调度平台 kafka 基于Redis分布式限流组件设计与使用实例 发送邮件 dalgen工具 多数据源 使用jedis客户端整合redis 基于位图实现布隆过滤器 基于redis 实现的简单队列 整合redission 客户端 ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    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. 在应用服务器...

    Spring 2.0 开发参考手册

    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. 在应用...

    spring chm文档

    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. 在应用...

    Spring中文帮助文档

    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. 在应用...

    Spring API

    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. 在应用...

    Java源码 SpringMVC Mybatis Shiro Bootstrap Rest Webservice

    7. Quartz定时调度任务集成(直接通过配置即可) 8. Httpclient破解验证码,登陆联通充值平台 9. 汉字、英文拆分、可以用作文档关键字搜索等。 10. Base64图片处理,支持PC,Android,IOS 11. Service Socket 、...

Global site tag (gtag.js) - Google Analytics