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

一 簡單的線程方式週期執行
所謂線程式就是規定了和thread相似的timer類每隔一段時間(本身在配置文件中定義的時間)run方法就會被執行一次,因此他是一個單線程類首先須要瞭解的是他繼承自java.util..TimerTask類,執行方法體爲其複寫的父類中的public void run()方法
  
  
           
  
  
  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.         }   

和其餘的javabean同樣,此類須要在配置文件中註冊,另外爲了分模塊管理applicationContext.xml文件,將專門的定時任務的配置單獨放在一個配置文件中,完成後在applicationContext.xml中導入便可Timer.xmljava

 

  
  
           
  
  
  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></beans> 

二 特定的時間執行特定的任務,這也是大多數系統須要的重要特性,好比指定在沒天的上午10點或每一個禮拜的禮拜幾執行特定得任務,它與上面那種方式不一樣的是他隱藏了線程信息,不過只要是定時就是線稱,它反覆的執行的操做爲getdata操做並與配置文件中的比較若是相同則進行相應的操做
此時定時任務類繼承 org.quartz.JobExecutionContext 類進行任務編寫操做
  
  
           
  
  
  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.xmlspring

 

  
  
           
  
  
  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></beans>  
  
  
           
  
  
  1. 附表:   
  2. "0 0 12 * * ?" 天天中午12點觸發    
  3. "0 15 10 ? * *" 天天上午10:15觸發    
  4. "0 15 10 * * ?" 天天上午10:15觸發    
  5. "0 15 10 * * ? *" 天天上午10:15觸發    
  6. "0 15 10 * * ? 2005" 2005年的天天上午10:15觸發    
  7. "0 * 14 * * ?" 在天天下午2點到下午2:59期間的每1分鐘觸發    
  8. "0 0/5 14 * * ?" 在天天下午2點到下午2:55期間的每5分鐘觸發    
  9. "0 0/5 14,18 * * ?" 在天天下午2點到2:55期間和下午6點到6:55期間的每5分鐘觸發    
  10. "0 0-5 14 * * ?" 在天天下午2點到下午2:05期間的每1分鐘觸發    
  11. "0 10,44 14 ? 3 WED" 每一年三月的星期三的下午2:10和2:44觸發    
  12. "0 15 10 ? * MON-FRI" 週一至週五的上午10:15觸發    
  13. "0 15 10 15 * ?" 每個月15日上午10:15觸發    
  14. "0 15 10 L * ?" 每個月最後一日的上午10:15觸發    
  15. "0 15 10 ? * 6L" 每個月的最後一個星期五上午10:15觸發    
  16. "0 15 10 ? * 6L 2002-2005" 2002年至2005年的每個月的最後一個星期五上午10:15觸發    
  17. "0 15 10 ? * 6#3" 每個月的第三個星期五上午10:15觸發 
相關文章
相關標籤/搜索