环境搭建:
将所需要的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表达式设置,推荐。