**(1)Quartz组件
**
(3)Quartz持久化
Quartz核心配置文件quartz.properties常见配置详解(配置在classpath中或在web.xml中指定,示例附在最后)
一、调度器属性配置
1、instanceName属性,调度器实例名,可以设定任意字符串,QuartzSheduler也是不设定的默认值,它通常应用于Quartz集群环境,以区别不同的调度器。
2、instanceId属性,调度器实例ID,和instaneName属性一样,instanceId属性也允许任何字符串。但这个值必须是在所有调度器实例中是唯一的,尤其是在一个集群当中。假如你想 Quartz 帮你生成这个值的话,可以设置为 AUTO。如果 Quartz 框架是运行在非集群环境中,那么自动产生的值将会是 NON_CLUSTERED。假如是在集群环境下使用 Quartz,这个值将会是主机名加上当前的日期和时间。大多情况下,设置为 AUTO 即可。
1
2
3
4
5
6 1</pre><pre name="code" class="html">#===============================================================
2#Configure Main Scheduler Properties
3#===============================================================
4org.quartz.scheduler.instanceName = QuartzScheduler
5org.quartz.scheduler.instanceId = AUTO
6
二、线程池属性配置
——有关线程必要的属性值,这些线程在 Quartz 中是运行在后台担当重任的
1、threadCount属性,线程数量,控制了多少个工作者线程被创建用来处理 Job。原则上是,要处理的 Job 越多,那么需要的工作者线程也就越多。threadCount 的数值至少为 1。Quartz 没有限定你设置工作者线程的最大值,但是在多数机器上设置该值超过100的话就会显得相当不实用了,特别是在你的 Job 执行时间较长的情况下。这项没有默认值,所以你必须为这个属性设定一个值。
2、threadPriority属性,线程优先级,优先级别高的线程比级别低的线程更优先得到执行。threadPriority 属性的最大值是常量 java.lang.Thread.MAX_PRIORITY,等于10。最小值为常量 java.lang.Thread.MIN_PRIORITY,为1。这个属性的正常值是 Thread.NORM_PRIORITY,为5。大多情况下,把它设置为5,这也是没指定该属性的默认值。
3、class属性,线程类属性,这个值是一个实现了 org.quartz.spi.ThreadPool 接口的类的全限名称。Quartz 自带的线程池实现类 是 org.quartz.smpl.SimpleThreadPool,它能够满足大多数用户的需求。这个线程池实现具备简单的行为,并经很好的测试过。它在调度器的生命周期中提供固定大小的线程池。你能根据需求创建自己的线程池实现,如果你想要一个随需可伸缩的线程池时也许需要这么做。这个属性没有 默认值,你必须为其指定值。
1
2
3
4
5
6
7 1#===============================================================
2#Configure ThreadPool
3#===============================================================
4org.quartz.threadPool.threadCount = 1
5org.quartz.threadPool.threadPriority = 5
6org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
7
三、作业存储属性配置,这就涉及到了持久化的问题——作业存储部分的设置描述了在调度器实例的生命周期中,Job 和 Trigger 信息是如何被存储的
把调度器信息存储在内存中非常的快也易于配置。当调度器进程一旦被终止,所有的 Job 和 Trigger 的状态就丢失了。要使 Job 存储在内存中需通过设置 org.quartz.jobStrore.
class
属性为 org.quartz.simpl.RAMJobStore,这也是Quartz的默认配置,就像在代码一
所做的那样。假如我们不希望在 JVM 退出之后丢失调度器的状态信息的话,我们可以使用关系型数据库或非关系型数据库来存储这些信息。持久化内容会在第三篇中详述。
1
2
3
4
5 1#===============================================================
2#Configure JobStore
3#===============================================================
4org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore <span style="font-family: 'Microsoft YaHei'; color: inherit; line-height: 18px;"> </span>
5
四、插件属性配置(这一块我没有用到,资料也不太好找,大家作为参考)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 1#配置trigger执行历史日志
2org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingTriggerHistoryPlugin
3org.quartz.plugin.triggHistory.triggerFiredMessage = Trigger {1}.{0} fired job {6}.{5} at: {4, date, HH:mm:ss MM/dd/yyyy}
4org.quartz.plugin.triggHistory.triggerCompleteMessage = Trigger {1}.{0} completed firing job {6}.{5} at {4, date, HH:mm:ss MM/dd/yyyy} with resulting trigger instruction code: {9}
5#配置job调度插件
6#加载 Job 和 Trigger 信息的类 (
7org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
8#指定存放调度器(Job 和 Trigger)信息的xml文件,默认是classpath下quartz_jobs.xml
9org.quartz.plugin.jobInitializer.fileNames = quartz_jobs.xml
10#org.quartz.plugin.jobInitializer.overWriteExistingJobs = false
11org.quartz.plugin.jobInitializer.failOnFileNotFound = true
12#自动扫描任务单并发现改动的时间间隔,单位为秒
13org.quartz.plugin.jobInitializer.scanInterval = 10
14#覆盖任务调度器中同名的jobDetail,避免只修改了CronExpression所造成的不能重新生效情况
15org.quartz.plugin.jobInitializer.wrapInUserTransaction = false
16
1
2 1**下面是与之配套的是quartz-jobs.xml配置,代表了一个基于CronTrigger的job:**
2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 1<?xmlversion="1.0"encoding="UTF-8"?>
2<job-scheduling-dataxmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd"
5 version="1.8">
6
7 <pre-processing-commands>
8 <delete-jobs-in-group>*</delete-jobs-in-group> <span> </span><!-- clear all jobs in scheduler -->
9 <delete-triggers-in-group>*</delete-triggers-in-group><span> </span><!-- clear all triggers in scheduler -->
10 </pre-processing-commands>
11
12 <processing-directives>
13 <overwrite-existing-data>true</overwrite-existing-data>
14 <ignore-duplicates>false</ignore-duplicates>
15 </processing-directives>
16
17 <schedule>
18 <job>
19 <name>helloQuartzJob</name>
20 <group>DEFAULT</group>
21 <description>简单的quartz使用</description>
22 <job-class>HelloQuartzJob</job-class>
23 <volatility>false</volatility>
24 <durability>true</durability>
25 <recover>false</recover>
26 </job>
27 <trigger>
28 <span> </span> <cron>
29 <name>trigger</name>
30 <group>DEFAULT</group>
31 <job-name>helloQuartzJob</job-name>
32 <job-group>DEFAULT</job-group>
33 <cron-expression>30/5 * * * * ?</cron-expression>
34 </cron>
35 </trigger>
36 </schedule>
37</job-scheduling-data>
38
附:web.xml配置quart-properties配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14 1<servlet>
2 <servlet-name>QuartzInitializer</servlet-name>
3 <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
4 <init-param>
5 <param-name>shutdown-on-unload</param-name>
6 <param-value>true</param-value>
7 </init-param>
8 <init-param>
9 <param-name>config-file</param-name>
10 <param-value>quartz.properties</param-value>
11 </init-param>
12 <load-on-startup>1</load-on-startup>
13</servlet>
14