位置框架 |
含义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支持配置文件,它的好处是比编写代码简单,且修改后不须要从新编译源码。
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.