位置框架 |
含義google |
容許的特殊字符spa |
1.net |
秒(0~59)插件 |
, - * /線程 |
2code |
分(0~59) |
, - * / |
3 |
小時(0~24) |
, - * / |
4 |
日期(1~31) |
, - * / ? L W C |
5 |
月(JAN~DEC或1~12) |
, - * / |
6 |
星期(SUN~SAT或1~7) |
, - * / ? L C # |
7 |
年(可選,1970~2099),若爲空,表示所有時間範圍 |
, - * / |
特殊字符 |
說明 |
* |
通配符,任意值 |
? |
無特定值。一般和其餘指定的值一塊兒使用,表示必須顯示該值但不能檢查 |
- |
範圍。e.g.小時部分10-12表示10:00,11:00, 12:00 |
, |
列分隔符。可讓你指定一系列的值。e.g.在星期域中指定MON、TUE和WED |
/ |
增量。表示一個值的增量,e.g.分鐘域中0/1表示從0開始,每次增長1min |
L |
表示Last。它在日期和星期域中表示有所不一樣。在日期域中,表示這個月的最後一天,而在星期域中,它永遠是7(星期六)。當你但願使用星期中某一天時,L字符很是有用。e.g.星期域中6L表示每個月的最後一個星期五 |
W |
在本月內離當天最近的工做日觸發,所謂的最近工做日,即當天到工做日的先後最短距離,若是當天即爲工做日,則距離是0;所謂本月內指的是不能跨月取到最近工做日,即便前/後月份的最後一天/第一天確實知足最近工做日。e.g. LW表示本月的最後一個工做日觸發,W強烈依賴月份。 |
# |
表示該月的第幾個星期,e.g. 1#2表示每個月的第一個星期一 |
C |
日曆值。日期值是根據一個給定的日曆計算出來的。在日期域中給定一個20C將在20日(日曆包括20日)或20往後日曆中包含的第一天(不包括20日)激活觸發器。例如在一個星期域中使用6C表示日曆中星期五(日曆包括星期五)或者第一天(日曆不包括星期五) |
Quartz支持任務持久化,這可讓你在運行時增長任務或者對現存的任務進行修改,併爲後續任務的執行持久化這些變動和增長的部分。中心概念是JobStore接口。默認的是RAMJobStore。
![初窺Quartz - 紫龍劍 - 倚天萬里須長劍](http://static.javashuo.com/static/loading.gif)
上述沒有用到任何的配置文件。Quartz支持配置文件,它的好處是比編寫代碼簡單,且修改後不須要從新編譯源碼。
quartz.properties文件定義了Quartz應用運行時行爲,還包含了許多能控制Quartz運轉的屬性。它應放在工程的classpath中。
代碼清單5:quartz.properties
在配置quart_jobs.xml時,遇到一個問題:
由於quartz從版本1.8開始,配置文件有所改動,之前quartz自帶的插件是JobInitializationPlugin,而1.8中是XMLSchedulingDataProcessorPlugin. xml schema亦有所改變,難道是改變後配置不對?錯誤提示是插件類找不到,jar包也都加入到工程了啊。最後終於發現,在quartz.properties特性文件中配置插件行最後多打了個分號。原來是一個多餘的分號引起的錯誤!
下面是新的xml配置文件格式示例。
代碼清單6:quartz_jobs.xml格式
<?xmlversion="1.0"encoding="UTF-8"?>
<job-scheduling-dataxmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.ogr/xml/job_scheduling_data_1_8.xsd"
version="1.8">
<pre-processing-commands>
<!--在執行做業和觸犯器以前執行的命令-->
<delete-jobs-in-group>*</delete-jobs-in-group>
<!--刪除標示組中的全部做業,若是是「*」,則刪除全部組中的做業,同時也會刪除與做業有關的觸犯器 -->
<delete-triggers-in-group>*</delete-triggers-in-group>
<!--刪除標示組中的全部觸犯器,若是是「*」,則刪除全部組中的觸發器 -->
<delete-job>
<!--刪除指定的做業,同時也會刪除與它關聯的觸犯器 -->
<name></name>
<group></group>
</delete-job>
<delete-trigger>
<!--刪除指定的觸犯器 -->
<name></name>
<group></group>
</delete-trigger>
</pre-processing-commands>
<processing-directives>
<!--在計劃做業和觸發器是應遵循的命令和原則 -->
<overwrite-existing-data>true or false</overwrite-existing-data>
<!--是否複寫已經存在的任務計劃數據,若是爲false而且ingore-duplicates非false,那麼文件中同名的觸發器或做業將會繼續存在,則會產生錯誤-->
<ignore-duplicates>true or false</ignore-duplicates>
<!--若是爲true,計劃中的任何同名的做業/觸發器將會被忽略,不會產生錯誤-->
</processing-directives>
<schedule>
<job>
<name>JobName</name>
<group>JobGroup</group>
<description></description>
<job-class></job-class>
<job-listener-ref></job-listener-ref>
<!-- volatility,durability,recover必須按順序設定 -->
<volatility></volatility>
<durability></durability>
<recover></recover>
<job-data-map>
<!-- entry能夠設定多個-->
<entry>
<key></key>
<value></value>
</entry>
</job-data-map>
</job>
<trigger>
<!-- Trigger分爲simple,cron,date-interval三種類型,一個trigger中只能指定一種類型-->
<simple>
<name></name>
<group></group>
<description></description>
<job-name></job-name>
<job-group></job-group>
<calendar-name></calendar-name>
<volatility></volatility>
<job-data-map>
<entry>
<key></key>
<value></value>
</entry>
</job-data-map>
<start-time></start-time>
<end-time></end-time>
<misfire-instruction></misfire-instruction>
<repeat-count></repeat-count>
<repeat-interval></repeat-interval>
</simple>
<cron>
<name></name>
<group></group>
<description></description>
<job-name></job-name>
<job-group></job-group>
<calendar-name></calendar-name>
<volatility></volatility>
<job-data-map>
<entry>
<key></key>
<value></value>
</entry>
</job-data-map>
<start-time></start-time>
<end-time></end-time>
<misfire-instruction></misfire-instruction>
<cron-expression></cron-expression>
<time-zone></time-zone>
</cron>
<date-interval>
<name></name>
<group></group>
<description></description>
<job-name></job-name>
<job-group></job-group>
<calendar-name></calendar-name>
<volatility></volatility>
<job-data-map>
<entry>
<key></key>
<value></value>
</entry>
</job-data-map>
<start-time></start-time>
<end-time></end-time>
<misfire-instruction></misfire-instruction>
<repeat-interval></repeat-interval>
<repeat-interval-unit></repeat-interval-unit>
</date-interval>
</trigger>
</schedule>
</job-scheduling-data>
代碼清單7:quartz_jobs.xml示例
<?xmlversion="1.0"encoding="UTF-8"?>
<job-scheduling-dataxmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd"
version="1.8">
<pre-processing-commands>
<delete-jobs-in-group>*</delete-jobs-in-group> <!-- clear all jobs in scheduler -->
<delete-triggers-in-group>*</delete-triggers-in-group><!-- clear all triggers in scheduler -->
</pre-processing-commands>
<processing-directives>
<overwrite-existing-data>true</overwrite-existing-data>
<ignore-duplicates>false</ignore-duplicates>
</processing-directives>
<schedule>
<job>
<name>helloQuartzJob</name>
<group>DEFAULT</group>
<description>簡單的quartz使用</description>
<job-class>HelloQuartzJob</job-class>
<volatility>false</volatility>
<durability>true</durability>
<recover>false</recover>
</job>
<trigger>
<cron>
<name>trigger</name>
<group>DEFAULT</group>
<job-name>helloQuartzJob</job-name>
<job-group>DEFAULT</job-group>
<cron-expression>30/5 * * * * ?</cron-expression>
</cron>
</trigger>
</schedule>
</job-scheduling-data>
代碼清單8:Quartz任務調度
這裏遇到個問題,提示錯誤:
Exception in thread "main" Java.lang.NoClassDefFoundError: javax/transaction/UserTransaction
是因爲缺乏jta.jar,google出的結果是在quartz發行包的/lib中有此jar包,可是在1.8中沒有找到。下載quartz 1.7中,也沒有找到,所以,在網上搜一個jta.jar包放置過程classpath中,而後編譯運行,ok.