環境搭建:
將所需要的jar及其依賴jar導入到classpath即可(此處所用版本爲2.2.1):
最好在開發時將Quartz的源代碼導入到開發環境中來。一方面可以通過閱讀源碼瞭解Quartz的實現原理,另一方面可以通過擴展或修改Quartz的一些類來實現某些尚不提供的功能。
配置文件:
A、quartz.properties
#============================================================================
# Configure Main Scheduler Properties
#============================================================================
org.quartz.scheduler.instanceName = org.quartz.scheduler.instanceId = AUTO
#============================================================================
# Configure ThreadPool
#============================================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 3
org.quartz.threadPool.threadPriority = 5
#============================================================================
# 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.fileName = quartz-config.xml
org.quartz.plugin.jobInitializer.overWriteExistingJobs = true
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.jobInitializer.scanInterval = 10
配置說明:
配置屬性均以org.quartz開頭。
調度屬性:
<pre name="code" class="java"><pre name="code" class="java"># Configure Main Scheduler Properties
調度器屬性包括兩部分:分別是設置調度的實例名(instanceName) 和(instanceId)。屬性
org.quartz.scheduler.instanceName可以是任何的字符串。默認名字一般都採用QuartzScheduler;第二個屬性
org.quartz.scheduler.instanceId和instanceName屬性一樣,instanceId屬性也允許任何字符串。這個值必須是所有調度器實例中唯一的,尤其是在一個集羣當中。可以通過Quartz框架生成,設置成AUTO。
線程池屬性:
這些線程在Quartz中是運行在後臺擔當重任的。org.quartz.threadPool.class,該值的設置是實現了org.quartz.spi.ThreadPool接口的類的權限名稱。org.quartz.simpleTreadPool,它能夠滿足大多數用戶的需求。這個線程池實現具備簡單的行爲,它在調度的生命週期中提供固定大小的線程池(該屬性無默認值)。
org.quartz.threafPool.threadCount屬性指定了線程池中可同時處理job的數量。至少爲1,無限定最大值,但是大多數機器上設置改值超過100的話性能會明顯下降(該屬性無默認值)。
org.quartz.threafPool.threadPriority屬性指定了工作線程優先級。優先級高的線程比優先級底的線程優先執行。最大值爲10,最小值爲1,正常值爲5,也是大多數情況下設置的值,也是默認的值。
插件配置:
org.quartz.plugin.triggHistory.class:屬性值爲org.quartz.plugin.LoggingJobHistoryPlugin表示記錄所有工作執行的歷史(本示例中使用的);另外有org.quartz.plugin.LoggingTriggerHistoryPlugin:觸發器觸發日誌記錄。
org.quartz.plugin.jobInitializer.class指定插件的實現類。
org.quartz.plugin.jobInitializer.fileName:默認會在classpath下尋找quartz_job.xml來獲得聲明的消息。可通過設置改變配置job的文件名。
org.quartz.plugin.jobInitializer.overWriteExistingJobs:爲true時,當有jobDetail被修改不會造成失效(false反之);結合使用另一個配置org.quartz.plugin.jobInitializer.scanInterval=10;自動掃描任務單改動的時間間隔(默認爲0,表示不自動加載),單位爲秒。讀者自行設置即可。
org.quartz.plugin.jobInitializer.failOnFileNotFound=true,基本上設置成true,不是太瞭解這個屬性......
B、quartz-config.xml
<?xml version='1.0' encoding='utf-8'?>
<quartz>
<job>
<job-detail>
<name>SendShortMessageJob</name>
<group>DEFAULT</group>
<description>SendShortMessageJob</description>
<job-class>com.homs.quartz.SendShortMessageJob</job-class>
<job-data-map allows-transient-data="true">
<entry>
<key>SendShortMessageJob</key>
<value>SendShortMessageJob</value>
</entry>
</job-data-map>
</job-detail>
<trigger>
<cron>
<name>SendShortMessageJob</name>
<group>DEFAULT</group>
<job-name>SendShortMessageJob</job-name>
<job-group>DEFALUT</job-group>
<cron-expression>0 */1 * * * ?</cron-expression>
</cron>
</trigger>
</job></quartz>
job定義一個任務,包括一個job-detail及一個trigger。
<job-detail>中,name指定任務名(唯一);group爲任務所在組(group和name唯一確定一個任務);description任務描述;job-class指定任務多在類;
job-data-map:指定job中設置鍵值對,可在程序中通過JobExecutionContext任務上下文獲取。
<trigger>中,設置觸發器,name爲觸發器名(唯一);group爲觸發器組名;job-name必須和對應的job的name一樣,group同理;常用的觸發器類型,也是企業級開發推薦,通過cron表達式設置,推薦。