1. 程式人生 > >Spring Quartz定時器

Spring Quartz定時器

而在Spring裡很好的集成了Quartz,在xml檔案裡面配一下時間就可以自動執行,不需要寫一行程式碼。  
Xml程式碼  收藏程式碼
  1. <bean id="methodInvokingJobDetail"      class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
  2.        <property name="targetObject"><ref bean="financeDAO"/></property>  
  3.        <
    property name="targetMethod"><value>confirmOrder</value></property>  
  4.    </bean>    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
  5.        <property name="jobDetail">  
  6.            <ref bean="methodInvokingJobDetail"/>  
  7.        </property>  
  8.        <property name="cronExpression">  
  9.            <value>0 0 6,12,20 * * ?</value>  
  10.        </property>  
  11.    </bean>    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
  12.        <property name="triggers">  
  13.            <
    list><ref local="cronTrigger"/></list>  
  14.        </property>  
  15.    </bean>  
其中:
  1. <property name="targetObject"><ref bean="financeDAO"/></property>  
  2.        <property name="targetMethod"><value>confirmOrder</value></property>  
financeDAO 為spring注入的介面類
confirmOrder定時執行的方法
0 0 6,12,20 * * ? 執行時間,一般寫在配置檔案中用${updateDate};

其中時間的定義按以下例子模仿 
表示式 
Java程式碼  收藏程式碼
  1.         意義  
  2. "0/10 * * * * ?"         每十秒觸發  
  3. "0 0/1 * * * ?"           每一分鐘觸發  
  4. "0 0 12 * * ?"      每天中午12點觸發  
  5. "0 15 10 ? * *"         每天上午10:15觸發  
  6. "0 15 10 * * ?"         每天上午10:15觸發  
  7. "0 15 10 * * ? *"       每天上午10:15觸發  
  8. "0 15 10 * * ? 2005"        2005年的每天上午10:15觸發  
  9. "0 * 14 * * ?"      在每天下午2點到下午2:59期間的每1分鐘觸發  
  10. "0 0/5 14 * * ?"        在每天下午2點到下午2:55期間的每5分鐘觸發  
  11. "0 0/5 14,18 * * ?"         在每天下午2點到2:55期間和下午6點到6:55期間的每5分鐘觸發  
  12. "0 0-5 14 * * ?"        在每天下午2點到下午2:05期間的每1分鐘觸發  
  13. "0 10,44 14 ? 3 WED"        每年三月的星期三的下午2:102:44觸發  
  14. "0 15 10 ? * MON-FRI"       週一至週五的上午10:15觸發  
  15. "0 15 10 15 * ?"        每月15日上午10:15觸發  
  16. "0 15 10 L * ?"         每月最後一日的上午10:15觸發  
  17. "0 15 10 ? * 6L"        每月的最後一個星期五上午10:15觸發   
  18. "0 15 10 ? * 6L 2002-2005"      2002年至2005年的每月的最後一個星期五上午10:15觸發  
  19. "0 15 10 ? * 6#3"       每月的第三個星期五上午10:15觸發  



如果出現了“Table 'database.qrtz_locks' doesn't exist”異常 
有兩種處理方法 
方法1: 
則處理方法為在宣告中的 
Xml程式碼  收藏程式碼
  1. default-autowire=byName  

改為 
Xml程式碼  收藏程式碼
  1. default-autowire="byName"  

方法2: 
配置檔案在<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" > 
多個autowire=no 屬性,如下 
Xml程式碼  收藏程式碼
  1. <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" autowire="no" >