1. 程式人生 > >Spring和Quartz實現的定時任務排程

Spring和Quartz實現的定時任務排程

Corn表示式

一、增加所依賴的JAR包

1. 增加Spring的Maven依賴

  1. <dependency>
  2.  <groupId>org.springframework</groupId>
  3.  <artifactId>spring-webmvc</artifactId>
  4.  <version>3.0.5.RELEASE</version>
  5. </dependency>

2. 增加Quartz的Maven依賴

  1. <dependency
    >
  2.  <groupId>org.quartz-scheduler</groupId>
  3.  <artifactId>quartz</artifactId>
  4.  <version>1.8.4</version>
  5. </dependency>

二、增加定時業務邏輯類

  1. publicclass ExpireJobTask {  
  2.     /** Logger */
  3.     privatestaticfinal Logger logger = LoggerFactory.getLogger(ExpireJobTask.
    class);  
  4.     /** 
  5.      * 業務邏輯處理 
  6.      */
  7.     publicvoid doBiz() {  
  8.     // 執行業務邏輯
  9.     // ........
  10.     }  
  11. }  

ExpireJobTask業務邏輯類與一般普通的類沒有任務區別,它定義的doBiz方法即為排程業務方法。

三、增加Spring配置

1. 增加一個執行緒池

  1. <!-- 執行緒執行器配置,用於任務註冊 -->
  2. <beanid="executor"class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"
    >
  3.  <propertyname="corePoolSize"value="10"/>
  4.  <propertyname="maxPoolSize"value="100"/>
  5.  <propertyname="queueCapacity"value="500"/>
  6. </bean>

2. 定義業務邏輯處理類

  1. <!-- 業務物件 -->
  2. <beanid="bizObject"class="com.aboy.potak.common.toolkit.scheduling.ExpireJobTask"/>

3. 增加排程業務邏輯

  1. <!-- 排程業務 -->
  2. <beanid="jobDetail"class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  3.  <propertyname="targetObject"ref="bizObject"/>
  4.  <propertyname="targetMethod"value="doBiz"/>
  5. </bean>

上面的配置中,我們以bizObject.doBiz方法為將要排程的業務執行邏輯。

4. 增加排程觸發器

  1. <beanid="cronTrigger"class="org.springframework.scheduling.quartz.CronTriggerBean">
  2.  <propertyname="jobDetail"ref="jobDetail"/>
  3.  <propertyname="cronExpression"value="10 0/1 * * * ?"/>
  4. </bean>

Cron表示式“10 */1 * * * ?”意為:從10秒開始,每1分鐘執行一次。

  1. <beanid="taskTrigger"class="org.springframework.scheduling.quartz.SimpleTriggerBean">
  2.  <propertyname="jobDetail"ref="jobDetail"/>
  3.  <propertyname="startDelay"value="10000"/>
  4.  <propertyname="repeatInterval"value="60000"/>
  5. </bean>

5. 增加排程

  1. <!-- 設定排程 -->
  2. <beanclass="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  3.  <propertyname="triggers">
  4.   <list>
  5.    <refbean="cronTrigger"/>
  6.   </list>
  7.  </property>
  8.  <propertyname="taskExecutor"ref="executor"/>
  9. </bean>

triggers屬性中,我們可以增加多個觸發器。

到此,Spring已經與Quartz完美的結合了,我們接下來的工作就是啟動系統,開始排程了。

四、Cron表示式的詳細用法

Cron表示式是一個字串,字串以5或6個空格隔開,分開共6個或7個域,每一個域代表一個含義,Cron有如下兩種語法,格式: 

Seconds Minutes Hours DayofMonth Month DayofWeek Year 或 

Seconds Minutes Hours DayofMonth Month DayofWeek 

欄位

允許值

允許的特殊字元

0-59

- * /

0-59

- * /

小時

0-23

-