Spring中的時間調度,定時任務


一、簡單的線程方式周期執行

  所謂線程式就是規定了和thread類似的timer類每隔一段時間(自己在配置文件中定義的時間)run方法就會被執行一次,所以它是一個單線程類。首先需要了解的是它繼承自java.util.TimerTask類,執行方法為其復寫的父類的public void run()方法。

View Code
1 package cn.xy.util;  
2 import java.util.TimerTask;  
3 publicclass MyThreadtimer extends TimerTask{  
4 @Override  
5      publicvoid run() {  
6          System.out.println("線程方式定時測試");  
7      }  
8 }  

  和其他的javabean一樣,此類需要在配置文件中注冊,另外為了分模塊管理applicationContext.xml文件,將專門的定時任務的配置單獨放在一個配置文件Timer.xml中,完成后在applicationContext.xml中導入即可。

View Code
 1 <?xml version="1.0" encoding="UTF-8"?>  
 2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
 3    
 4 <beans>  
 5    
 6     <!-- 周期執行的類注冊 -->  
 7     <bean id="mythreadtimer" class="cn.xy.util.MyThreadtimer"  
 8         abstract="false" singleton="true" lazy-init="default"  
 9         autowire="default" dependency-check="default">  
10     </bean>  
11     <!-- 使用spring的時間調度管理 -->  
12     <!-- 使用此管理器必須導入的spring庫為spring misc 庫 -->  
13       
14     <bean id="scheduledtimertask"  
15     class="org.springframework.scheduling.timer.ScheduledTimerTask"  
16     abstract="false" singleton="true" lazy-init="default"  
17     autowire="default" dependency-check="default">  
18     <!-- 周期執行的任務可以是list指定的多個線程 -->  
19     <property name="timerTask">  
20          <ref bean="mythreadtimer" />  
21     </property>  
22     <!-- 執行周期 thread中的sleep -->  
23     <property name="period">  
24         <value>10000</value>  
25     </property>  
26     <!-- 在容器啟動完成后的延遲執行時間 -->  
27     <property name="delay">  
28          <value>5000</value>  
29     </property>  
30     </bean>  
31     <!-- 類似事物管理一樣定時任務也要委托給spring的定時工廠進行管理 -->  
32       
33     <bean id="timerFactory"  
34     class="org.springframework.scheduling.timer.TimerFactoryBean"  
35     abstract="false" singleton="true" lazy-init="default"  
36     autowire="default" dependency-check="default">  
37     <property name="scheduledTimerTasks">  
38          <list>  
39              <ref bean="scheduledtimertask" />  
40         </list>  
41     </property>  
42     </bean>
43 
44 </beans>  


二、特定的時間執行特定的任務

  這也是大多數系統需要 重要特性,比如指定在每天10點或每個禮拜的禮拜幾執行特定的任務,它與上面那種方式不同的是他隱藏了線程信息,不過只要是定時就是線程,它反復的執行的操作為getdata操作並與配置文件中的比較如果相同則進行相應的操作。此時定時任務類繼承org.quartz.JobExecutionContext類進行任務編寫操作。

View Code
 1 package cn.xy.util;  
 2    
 3 import java.util.Date;  
 4    
 5 import org.quartz.JobExecutionContext;  
 6 import org.quartz.JobExecutionException;  
 7 import org.springframework.scheduling.quartz.QuartzJobBean;  
 8    
 9 publicclass Mytimerservice extends QuartzJobBean {  
10    
11     @Override  
12     protectedvoid executeInternal(JobExecutionContext arg0)  
13             throws JobExecutionException {  
14         System.out.println(new Date().toString()+"定時任務測試");  
15    
16     }  
17    
18 }  

配置定時任務的xml文件servicetimer.xml

View Code
 1 <?xml version="1.0" encoding="UTF-8"?>  
 2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
 3    
 4 <beans>  
 5  <bean id="jobdetailbean"  
 6     class="org.springframework.scheduling.quartz.JobDetailBean"  
 7     abstract="false" singleton="true" lazy-init="default"  
 8     autowire="default" dependency-check="default">  
 9     <property name="jobClass">  
10         <value>cn.xy.util.Mytimerservice</value>  
11     </property>  
12     <!-- 注入任務類所需要的bean   
13     <property name="jobDataAsMap">  
14         <map>  
15             <entry key="topimgop">  
16             <ref bean="topimgop"/>  
17             </entry>  
18         </map>  
19     </property>  
20     -->  
21  </bean>  
22  <!-- 定時器注冊 -->  
23  <bean id="servicetrigger"  
24     class="org.springframework.scheduling.quartz.CronTriggerBean"  
25     abstract="false" singleton="true" lazy-init="default"  
26     autowire="default" dependency-check="default">  
27     <!-- 任務的詳細信息 -->  
28     <property name="jobDetail">  
29         <ref bean="jobdetailbean" />  
30     </property>  
31     <!-- 定時執行的時間 上午11點07分-->  
32     <property name="cronExpression">  
33         <value>0 20 11 * * ?</value>  
34     </property>  
35  </bean>  
36  <!-- 定時任務工廠注冊 -->  
37    
38  <bean id="schedulerFactory"  
39     class="org.springframework.scheduling.quartz.SchedulerFactoryBean"  
40     abstract="false" singleton="true" lazy-init="default"  
41     autowire="default" dependency-check="default">  
42     <property name="triggers">  
43         <list>  
44             <ref bean="servicetrigger" />  
45         </list>  
46     </property>  
47  </bean>
48 
49 </beans>  

 

附表: 

  • "0 0 12 * * ?" 每天中午12點觸發  
  • "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點到下午2:59期間的每1分鍾觸發  
  • "0 0/5 14 * * ?" 在每天下午2點到下午2:55期間的每5分鍾觸發  
  • "0 0/5 14,18 * * ?" 在每天下午2點到2:55期間和下午6點到6:55期間的每5分鍾觸發  
  • "0 0-5 14 * * ?" 在每天下午2點到下午2:05期間的每1分鍾觸發  
  • "0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和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年至2005年的每月的最后一個星期五上午10:15觸發  
  • "0 15 10 ? * 6#3" 每月的第三個星期五上午10:15觸發  

 

原文鏈接:http://blog.csdn.net/hzw2312/article/details/6822259


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM