(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 即可。  

</pre><pre name="code" class="html">#===============================================================       
#Configure Main Scheduler Properties      
#===============================================================         
org.quartz.scheduler.instanceName = QuartzScheduler         
org.quartz.scheduler.instanceId = AUTO    


二、线程池属性配置
——有关线程必要的属性值,这些线程在 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,它能够满足大多数用户的需求。这个线程池实现具备简单的行为,并经很好的测试过。它在调度器的生命周期中提供固定大小的线程池。你能根据需求创建自己的线程池实现,如果你想要一个随需可伸缩的线程池时也许需要这么做。这个属性没有 默认值,你必须为其指定值。  

#===============================================================       
#Configure ThreadPool       
#===============================================================         
org.quartz.threadPool.threadCount =  1         
org.quartz.threadPool.threadPriority = 5         
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool       

三、作业存储属性配置,这就涉及到了持久化的问题——作业存储部分的设置描述了在调度器实例的生命周期中,Job 和 Trigger 信息是如何被存储的

把调度器信息存储在内存中非常的快也易于配置。当调度器进程一旦被终止,所有的 Job 和 Trigger 的状态就丢失了。要使 Job 存储在内存中需通过设置  org.quartz.jobStrore.class 属性为 org.quartz.simpl.RAMJobStore,这也是Quartz的默认配置,就像在代码一所做的那样。假如我们不希望在 JVM 退出之后丢失调度器的状态信息的话,我们可以使用关系型数据库或非关系型数据库来存储这些信息。持久化内容会在第三篇中详述

#===============================================================     
#Configure JobStore     
#===============================================================      
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore   <span style="font-family: 'Microsoft YaHei'; color: inherit; line-height: 18px;">  </span>


四、插件属性配置(这一块我没有用到,资料也不太好找,大家作为参考)

#配置trigger执行历史日志 
org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingTriggerHistoryPlugin    
org.quartz.plugin.triggHistory.triggerFiredMessage = Trigger {1}.{0} fired job {6}.{5} at: {4, date, HH:mm:ss MM/dd/yyyy}    
org.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}    
#配置job调度插件  
#加载 Job 和 Trigger 信息的类   ( 
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin  
#指定存放调度器(Job 和 Trigger)信息的xml文件,默认是classpath下quartz_jobs.xml  
org.quartz.plugin.jobInitializer.fileNames = quartz_jobs.xml    
#org.quartz.plugin.jobInitializer.overWriteExistingJobs = false    
org.quartz.plugin.jobInitializer.failOnFileNotFound = true    
#自动扫描任务单并发现改动的时间间隔,单位为秒  
org.quartz.plugin.jobInitializer.scanInterval = 10  
#覆盖任务调度器中同名的jobDetail,避免只修改了CronExpression所造成的不能重新生效情况  
org.quartz.plugin.jobInitializer.wrapInUserTransaction = false 
下面是与之配套的是quartz-jobs.xml配置,代表了一个基于CronTrigger的job:

<?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> <span>		</span><!-- clear all jobs in scheduler -->  
       <delete-triggers-in-group>*</delete-triggers-in-group><span>	</span><!-- 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>  
       <span>	</span>  <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>

附:web.xml配置quart-properties配置

<servlet>
	<servlet-name>QuartzInitializer</servlet-name>
	<servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
	<init-param>
		<param-name>shutdown-on-unload</param-name>
		<param-value>true</param-value>
	</init-param>
	<init-param>
		<param-name>config-file</param-name>
		<param-value>quartz.properties</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>




本文转载:CSDN博客