1. 程式人生 > 實用技巧 >Spring+Quartz 實現簡單定時器

Spring+Quartz 實現簡單定時器

環境/條件:

  1. JDK1.7

  2. jar包 spring-context-support 4.2.6.RELEASE

  3. jar包 spring-org.quartz-scheduler 2.2.1

  4. idea

第一步 編寫要執行的方法

例:每天凌晨一點執行將年假表更新

 1   public class YearLeaveService{
 2  3     private Dao dao;
 4      
 5     public Dao getDao(){return dao;}
 6     
 7     public void setDao(Dao dao){this
.dao = dao;} 8 9 /** 10 *要定時執行的方法 11 */ 12 public void replaceAnnualLeaveByUsers(){ 13 /** 14 *邏輯…… 15 */ 16 } 17 }

第二步 配置定時器

 1 <!--time-bean.xml-->
 2 
 3 <?xml version="1.0" encoding="UTF-8"?>
 4 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"
> 5 6 <beans> 7 8 <!--排程工廠--> 9 <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 10 <property name="triggers"> 11 <list> 12 <ref local="replaceYearLeaveTrigger" /><!--排程觸發器--> 13 <!--
……--> 14 <!--……--> 15 </list> 16 </property> 17 </bean> 18 19 <!--定時計算年數天假--> 20 <bean id="replaceYearLeave" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 21 <property name="targetObject" ref="yearLeaveService" /><!--呼叫類--> 22 <property name="targetMethod" value="replaceAnnualLeaveByUsers" /><!--呼叫方法--> 23 <property name="concurrent" value="false"/><!--是否同時--> 24 </bean> 25 <!--cron表示式觸發器--> 26 <bean id="replaceYearLeaveTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> 27 <property name="jobDetail" ref="replaceYearLeave"/><!--工作細節的bean--> 28 <property name="cronExpression" value="0 0 1 * * ?"/><!--每天凌晨1點執行一次0 0 1 * * ?--> 29 </bean> 30 31 <!--……--> 32 <!--……--> 33 </beans>

屬性說明:

  1. targetObject:類

  2. targetMethod:方法

  3. concurrent:是否同時(false:上一個定時任務未完成,此任務就不會開始;true:上一個定時任務問完成,此任務同時執行),一般為false

  4. jobDetail:定時任務詳情(就是前面的bean)

  5. cronExpression:cron表示式 (cron線上生成工具:http://www.bejson.com/othertools/cron/