spring整合quartz实现定时任务调度

来源:互联网 发布:恒大淘宝队服 编辑:程序博客网 时间:2024/04/30 12:02

一. 核心类

1. Job: 表示一个工作, 具体的业务处理都在这里.

2. JobDetail: 表示一个具体的可执行的调度程序.

3. Trigger: 用于调度参数的配置(什么时候去调用Job).

4. Scheduler: 表示一个调度容器, 容器中有一个线程池, 用来并行调度执行每个作业, 一个调度容器中可以注册多个JobDetail和Trigger. 


二. 整合spring

1. 代码结构图:



2. applicationContext.xml

[html] view plaincopy
  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:context="http://www.springframework.org/schema/context"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans    
  6.     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd    
  7.     http://www.springframework.org/schema/context    
  8.     http://www.springframework.org/schema/context/spring-context-2.5.xsd"  
  9.     default-autowire="byName">  
  10.   
  11.     <!-- 调度器 -->  
  12.     <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
  13.         <property name="triggers">  
  14.             <list>  
  15.                 <!-- 触发器列表 -->  
  16.                 <ref bean="cronTrigger" />  
  17.             </list>  
  18.         </property>  
  19.         <!-- 加载配置文件, 如果不配置, 将会使用quartz默认的配置 -->  
  20.         <property name="configLocation" value="classpath:quartz.properties" />  
  21.     </bean>  
  22.   
  23.     <!-- 触发器 -->  
  24.     <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
  25.         <!-- 指向我们的任务 -->  
  26.         <property name="jobDetail" ref="reportTask" />  
  27.         <!-- 每天晚上23点1分到59分,每分钟运行一次 -->  
  28.         <property name="cronExpression" value="0 1-59 23 * * ?" />  
  29.     </bean>  
  30.       
  31.     <!-- 业务处理类 -->  
  32.     <bean name="reportTask" class="org.springframework.scheduling.quartz.JobDetailBean">  
  33.         <property name="jobClass" value="com.zdp.quartz.BusinessReport" />  
  34.     </bean>  
  35. </beans>  

3. quartz.properties

[plain] view plaincopy
  1. #============================================================================  
  2. # Configure Main Scheduler Properties    
  3. #============================================================================  
  4. org.quartz.scheduler.instanceName = DefaultQuartzScheduler  
  5. org.quartz.scheduler.instanceId = AUTO  
  6. org.quartz.scheduler.rmi.export = false  
  7. org.quartz.scheduler.rmi.proxy = false  
  8. org.quartz.scheduler.wrapJobExecutionInUserTransaction = false  
  9.   
  10. #============================================================================  
  11. # Configure ThreadPool    
  12. #============================================================================  
  13. org.quartz.threadPool.threadCount = 10  
  14. org.quartz.threadPool.threadPriority = 5  
  15.   
  16. #============================================================================  
  17. # Configure JobStore    
  18. #============================================================================  
  19. org.quartz.jobStore.misfireThreshold = 60000  

4. BusinessReport.java

[java] view plaincopy
  1. /** 
  2.  * 业务处理类 
  3.  */  
  4. public class BusinessReport implements Job {  
  5.     // 执行报表统计入口函数  
  6.     public void execute(JobExecutionContext context) throws JobExecutionException {  
  7.         System.out.println("开始执行报表的业务逻辑了, 现在的时间是: " + new Date());  
  8.     }  
  9. }  


5. Main.Java

[java] view plaincopy
  1. /** 
  2.  *  测试类 
  3.  */  
  4. public class Main {  
  5.     public static void main(String[] args) {  
  6.         new ClassPathXmlApplicationContext("applicationContext.xml");  
  7.     }  
  8. }  

三. cronExpression表达式

0 0 12 * * ? --------------- 在每天中午12:00触发 
0 15 10 ? * * --------------- 每天上午10:15触发 
0 15 10 * * ? --------------- 每天上午10:15触发 
0 15 10 * * ? * --------------- 每天上午10:15触发 
0 15 10 * * ? 2005 --------------- 在2005年中的每天上午10:15触发 
0 * 14 * * ? --------------- 每天在下午2:00至2:59之间每分钟触发一次 
0 0/5 14 * * ? --------------- 每天在下午2:00至2:59之间每5分钟触发一次 
0 0/5 14,18 * * ? --------------- 每天在下午2:00至2:59和6:00至6:59之间的每5分钟触发一次 
0 0-5 14 * * ? --------------- 每天在下午2:00至2:05之间每分钟触发一次 
0 10,44 14 ? 3 WED --------------- 每三月份的星期三在下午2:00和2:44时触发 
0 15 10 ? * MON-FRI --------------- 从星期一至星期五的每天上午10:15触发 
0 15 10 15 * ? --------------- 在每个月的每15天的上午10:15触发 
0 15 10 L * ? --------------- 在每个月的最后一天的上午10:15触发 
0 15 10 ? * 6L --------------- 在每个月的最后一个星期五的上午10:15触发 
0 15 10 ? * 6L 2002-2005 --------------- 在2002, 2003, 2004, 2005年的每个月的最后一个星期五的上午10:15触发 
0 15 10 ? * 6#3 --------------- 在每个月的第三个星期五的上午10:15触发 
0 0 12 1/5 * ? --------------- 从每月的第一天起每过5天的中午12:00时触发 
0 11 11 11 11 ? --------------- 在每个11月11日的上午11:11时触发
0 0
原创粉丝点击