☆Quartz可以通過XML來配置定時服務,簡單筆記如下:
☆
定義一個處理業務邏輯的Class[繼承Job],例如

DeleteFileJob
package mypackage;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class DeleteFileJob implements Job {
public void execute(JobExecutionContext context)
throws JobExecutionException {
System.out.println("delete File!");
}
}
☆
配置Job[在conf目錄下新建jobs.xml][每兩秒執行一次DeleteFileJob]

conf/jobs.xml
<?xml version='1.0' encoding='utf-8'?>
<quartz xmlns="http://www.opensymphony.com/quartz/JobSchedulingData"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opensymphony.com/quartz/JobSchedulingData
http://www.opensymphony.com/quartz/xml/job_scheduling_data_1_5.xsd"
version="1.5">
<job>
<job-detail>
<name>deleteFileJob</name>
<group>dailyJob</group>
<description>deleteFileJob</description>
<job-class>mypackage.DeleteFileJob</job-class>
<volatility>false</volatility>
<durability>false</durability>
<recover>false</recover>
</job-detail>
<trigger>
<cron>
<name>dailyTrigger</name>
<group>dailyTrigger</group>
<description>dailyTrigger</description>
<job-name>deleteFileJob</job-name>
<job-group>dailyJob</job-group>
<cron-expression>0/2 * * * * ?</cron-expression>
</cron>
</trigger>
</job>
</quartz>
☆
配置Quartz[在conf目錄下新建quartz.properties]
[簡單說明:線程數量=一個(org.quartz.threadPool.threadCount=1),
線程優先級=普通(org.quartz.threadPool.threadPriority=5),
使用JobInitializationPlugin插件(org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin),
Job的配置文件(org.quartz.plugin.jobInitializer.fileNames= conf/jobs.xml)]

conf/quartz.properties
#============================================================================
# Configure Main Scheduler Properties
#============================================================================
org.quartz.scheduler.instanceName = MyScheduler
org.quartz.scheduler.instanceId = AUTO
#============================================================================
# Configure ThreadPool
#============================================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 1
org.quartz.threadPool.threadPriority = 5
#============================================================================
# Configure JobStore
#============================================================================
org.quartz.jobStore.misfireThreshold = 60000
#============================================================================
# Configure Plugins
#============================================================================
org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileNames = conf/jobs.xml
org.quartz.plugin.jobInitializer.overWriteExistingJobs = true
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.jobInitializer.scanInterval = 10
org.quartz.plugin.jobInitializer.wrapInUserTransaction = false
☆
啟動Quartz[新建一個Class,在Main中寫入下列代碼][執行可以看結果]

main函數
public static void main(String[] args) throws Exception {
System.out.println("start");
System.getProperties().put("org.quartz.properties","conf/quartz.properties");
StdSchedulerFactory.getDefaultScheduler().start();
System.out.println("end");
}
☆
配置中cron-expression說明[網摘]
同樣的,像SimpleTrigger一樣,CroTrigger有一個startTime(啟始時間)來記載下線程開始啟動的時間,和endTime(結束時間)<非必須設定>來記載線程不繼續執行的時間點。
Cron-Expressions是用來設定CronTrigger的實例,而Cron-Expressions一串字符串的表達式,而實際上是由七個sub-expressions(子式)所組成,來描述線程的個別細節部分。而這些sub-expression(子式)是用空白來區隔,并呈現順序和意思如下:
"秒(Seconds) 分(Minutes) 小時(Hours) 天(Day-of-Month) 月份(Month) 星期(Day-of-Week) 年(Year)<非必須描述>"
舉例來說,一個完整的cron-expression字符串"0 0 12 ? * WED"的意思是"每個星期三的中午十二點"。
個別的sub-expression可以包含了范圍和/或列舉的方式描述,如上行舉例的星期這個字段("WED"),我們可以置換為"FRI"、"MON,WED,FRI"、甚至于"MON-WED,SAT"來表示。
星號(就是*這個)就是在那個字段是任意值的意思,以先前的為例,在月份這欄用星號表示每一個月份的意思阿,而如果把星號放到星期這欄,就表示這星期的每一天。
每一個字段都有一組數值來明確的說明,而這些數值就要正確的使用,如秒和分的字段就是數字0到59、時的字段就是數字0到23,日期可以0到31之間的任何數字,但必須注意的是你所選的月份有幾天阿。月份的可以指定0到11的數值,也可以用字符串JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV 和 DEC來表示。
星期字段可以填入的值有1到7(1表示星期日),或者使用字符串SUN, MON, TUE, WED, THU, FRI 和 SAT。
左斜線(就是/這個)表示一個數值的增加,如你用"0/15"來表示分的字段,這意思是"開始于整點零分,每隔15分鐘";如果在分字段用"3/20"表示"開始于第三分鐘,每隔20分鐘",而這意思等同"3,23,43"的表示意思。
問號(就是?這個)是允許使用在天和星期上的字段,而這表示"沒有特定值",這特別有用在于要設定其中一個字段,但與另一個字段無關時。下面會舉例,或者看CronTrigger JavaDOC有明確的說明。
L字母允許使用在天和日期上的字段,這個字母L是"last"的縮寫,但在放在這兩個字段有個別不同的意思,如L字母放在天的字段,表示這個月的最后一天,一月的最后一天是31號,二月的最后一天是28號(非潤年)。如果把L字母放到星期字段的話只是單純的表示"7"或"SAT"星期六而已。但是如果把L字母接在星期字段原來值的后面,這就表示"這個月的最后星期幾",舉例"6L"或"FRIL"都是表示這個月的最后一個星期五。所以呢,當使用L這個字母時,很重要的一點,就是不可以跟列舉或范圍的值放在一起,不然你會搞不清楚結果。
W子母表示所選取最接近非假日的平常日(星期一到星期五)的日子,如"15W"的表示放在天字段的話,這表示"這月份的第15天最接近平常日的日子"。
井號(就是#這個)表示這個月第幾個星期幾的平常日,如"6#3"或者"FRI#3"在星期的字段,表示"這個月的第三個星期五"。
posted on 2007-11-29 17:39
破繭而出 閱讀(3803)
評論(2) 編輯 收藏 所屬分類:
Java