天天看點

quarz設定定時器任務的有效時間段_spring Quartz定時任務排程 時間設定

Quartz架構提供了豐富的任務排程支援,比如,在

何時執行何種任務,它是一個開源的由OpenSymphony維護的項目,開發者能夠在Java EE,或單獨的Java

SE應用中使用它。無論是簡單的任務排程,還是複雜的企業級應用,Quartz都能夠很好地勝任。其中,這些任務可以是普通POJO,甚至還可以是EJB

3.0元件。

如果開發者需要開發如下方面的應用,則Quartz是理想的選擇。

◆驅動工作流:比如,如果新建立的流程任務需要在2小時内處理完,則在2小時後Quartz會檢查訂單是否成功處理。如果沒有處理,則Quartz會依據工作流定義的規則來對訂單進行處理,銷毀它,或者進行其他處理。

◆系統維護工作:比如,在每個工作日的固定時間将RDBMS中的内容導出為XML檔案。

Spring

2.0提供了org.springframework.scheduling.quartz包,以支援Quartz任務排程內建。為提供使用者的任務,開發

者實作的類必須繼承于quartz.QuartzJobBean抽象類。QuartzJobBean是Quartz中org.quartz.Job接口的

簡單實作(子類),Spring為簡化Job接口的實作而提供了QuartzJobBean類。QuartzJobBean同Java 2

SDK中的TimerTask類似,用于定義任務本身。其中,executeInternal()方法定義待執行的任務,這同TimerTask中的

run()類似。

為了指定更複雜的任務排程規則,開發者要使用Spring提供的CronTriggerBean,它是Quartz中

org.quartz.CronTrigger的子類,Spring

2.0為簡化CronTrigger子類的開發而提供了CronTriggerBean。CronTriggerBean比

SimpleTriggerBean功能更強大,它能夠控制任務執行的精确時間,比如,早上九點半需要執行某QuartzJobBean中給定的任務。借

助于CronTriggerBean中的cronExpression屬性能夠設定任務的執行時機。

Quartz是一個強大的企業級任務排程架構,Spring中繼承并簡化了Quartz,下面就看看在Spring中怎樣配置Quartz:首先我們來寫二個被排程的類QuartzJob,及QuartzJobTwo,二個以上類似:

package com.writchie.quartz;

public class QuartzJob

{

public void work()

{

System.out.println("Spring Quartz的任務排程1被調用!");

//定時調用的業務邏輯

}

}

package com.writchie.quartz;

public class QuartzJobTwo

{

public void work()

{

System.out.println("Spring Quartz的任務排程2被調用 !");

//定時調用的業務邏輯

}

}

Spring的配置檔案applicationContext.xml:

xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

work

work

10,15,20,25,30,35,40,45,50,55 * * * * ?

0 15 13 ? * SUN-SAT

class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

測試程式:

package com.writchie.quartz;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class QuartzService {

public static void main(String[] args) {

System.out.println("測試任務排程開始...");

ApplicationContext context = new ClassPathXmlApplicationContext(

"applicationContext.xml");

// 如果配置檔案中将startQuertz bean的lazy-init設定為false 則不用執行個體化

// context.getBean("startQuertz");

System.out.print("測試任務排程結束!/n");

}

}

測試結果:

測試任務排程開始...

- Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.

測試任務排程結束!

Spring Quartz的任務排程1被調用!

Spring Quartz的任務排程1被調用!

Spring Quartz的任務排程1被調用!

Spring Quartz的任務排程1被調用!