企业级任务调度框架Quartz(5) Quartz的声明式配置

前序:
    前面咱们已经经过编程的方式实现了多个做业任务执行具体操做的演示;但具体到实际的时候,若是咱们要在 Job 启动以后改变它的执行时间和频度,则必须去修改源代码从新编译,咱们很难去以编程的形式来实现做业任务的注册(注册到任务调度器)和对其的后期维护,为了 便于维护咱们将采起配置的形式来实现;

1.quartz.properties
    Quartz最重要的配置文件就是quartz.properties;它决定了quartz的运行状况;其中包括了Quartz 应用运行时行为,以及运行过程当中相关属性;
下面咱们将大体描述下quartz.properties的相关配置项:
1)1)Configure Main Scheduler Properties ---·调度器属性  
   java

Java代码   收藏代码
  1. org.quartz.scheduler.instanceName = QuartzScheduler    

调度器的实例名(instanceName) ,它用来在用到多个调度器区分特定的调度器实例
   数据库

Java代码   收藏代码
  1. org.quartz.scheduler.instanceId = AUTO    


实例 ID (instanceId),调度器的第二个属性是 org.quartz.scheduler.instanceId和 instaneName 属性同样,instanceId 属性也容许任何字符串。这个值必须是在全部调度器实例中是惟一的,尤为是在一个集群当中。假如你想 Quartz 帮你生成这个值的话,能够设置为 AUTO。若是 Quartz 框架是运行在非集群环境中,那么自动产生的值将会是
NON_CLUSTERED。假如是在集群环境下使用 Quartz,这个值将会是主机名加上当前的日期和时间。大多状况下,设置为 AUTO 便可。

2)#Configure ThreadPool    ---线程池属性
  编程

Java代码   收藏代码
  1. org.quartz.threadPool.threadCount =  5   


接下来的部分是设置有关线程必要的属性值,这些线程在 Quartz 中是运行在后台担当重任的。threadCount 属性控制了多少个工做者线程被建立用来处理 Job。原则上是,要处理的 Job 越多,那么须要的工做者线程也就越多。threadCount 的数值至少为 1。Quartz 没有限定你设置工做者线程的最大值,可是在多数机器上设置该值超过100的话就会显得至关不实用了,特别是在你的 Job 执行时间较长的状况下。这项没有默认值,因此你必须为这个属性设定一个值。
   框架

Java代码   收藏代码
  1. org.quartz.threadPool.threadPriority = 5     

   
threadPriority 属性设置工做者线程的优先级。优先级别高的线程比级别低的线程更优先获得执行。threadPriority 属性的最大值是常量java.lang.Thread.MAX_PRIORITY,等于10。最小值为常量 java.lang.Thread.MIN_PRIORITY,为1。这个属性的正常值是 Thread.NORM_PRIORITY,为5。大多状况下,把它设置为5,这也是没指定该属性的默认值。
   测试

Java代码   收藏代码
  1. org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool   


最后一个要设置的线程池属性是 org.quartz.threadPool.class。这个值是一个实现了 org.quartz.spi.ThreadPool 接口的类的全限名称。Quartz 自带的线程池实现类是 org.quartz.smpl.SimpleThreadPool,它可以知足大多数用户的需求。这个线程池实现具有简单的行为,并经很好的测试过。它 在调度器的生命周期中提供固定大小的线程池。你能根据需求建立本身的线程池实现,若是你想要一个随需可伸缩的线程池时也许须要这么作。这个属性没有默认 值,你必须为其指定值。 

3)#Configure JobStore  ---做业存储设置   
   spa

Java代码   收藏代码
  1. org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore    

 
做业存储部分的设置描述了在调度器实例的生命周期中,Job 和 Trigger 信息是如何被存储的。咱们尚未谈论到做业存储和它的目的;由于对当前例子是非必的,因此咱们留待之后说明。如今的话,你所要了解的就是咱们存储调度器信 息在内存中而不是在关系型数据库中就好了。把调度器信息存储在内存中很是的快也易于配置。当调度器进程一旦被终止,全部的 Job 和 Trigger 的状态就丢失了。要使 Job 存储在内存中需经过设置 org.quartz.jobStrore.class 属性为 org.quartz.simpl.RAMJobStore,就像在前面所作的那样。假如咱们不但愿在 JVM 退出以后丢失调度器的状态信息的话,咱们可使用关系型数据库来存储这些信息。这须要另外一个做业存储(JobStore) 实现,咱们在后面将会讨论到。


4)#Configure Plugins     --插件配置插件

Java代码   收藏代码
  1. org.quartz.plugin.jobInitializer.class =         
  2. org.quartz.plugins.xml.JobInitializationPlugin         
  3. org.quartz.plugin.jobInitializer.overWriteExistingJobs = true        
  4. org.quartz.plugin.jobInitializer.failOnFileNotFound = true        
  5. org.quartz.plugin.jobInitializer.validating=false    


从上面咱们的代码就能够看出来,配置的为关于做业初始化的内容;
要在咱们的例子中声明式配置调度器信息,咱们会用到一个 Quartz 自带的叫作 org.quartz.plugins.xml.JobInitializationPlugin 的插件。
默认时,这个插件会在 classpath 中搜索名为 quartz_jobs.xml 的文件并从中加载 Job 和 Trigger 信息。
当初始化类为JobInitializationPlugin 的时候,系统将主动到classpath下面去找到job的配置文件;
若是咱们使用xml的形式来完成卒做业任务的注册,则大大提升咱们的工做效率和工做的准确性!
咱们的ScanDirectoryJob做业的相关信息是在将做业注册到任务调度器的时候,经过编程的方式来事项初始化的;
    如今咱们要经过配置文件的时候来完成做业信息初始化的动做;因此咱们要将初始化的信息在配置文件上进行体现; 线程

Java代码   收藏代码
  1. <?xml version='1.0' encoding='utf-8'?>  
  2. <quartz>  
  3.     <job> <!--一个做业是由jobdetail和Trigger来体现的-->  
  4.     <job-detail>  
  5.     <name>ScanDirectory</name> <!--做业名称-->  
  6.     <group>DEFAULT</group>     <!--做业所属组别-->  
  7.     <description>   
  8.          A job that scans a directory for files     
  9.          </description> <!--做业的相关描述信息-->  
  10.          <!--指定做业类文件-->  
  11.     <job-class>     
  12.          org.cavaness.quartzbook.chapter3.ScanDirectoryJob  
  13.          </job-class  
  14.       <volatility>false</volatility>  
  15.       <durability>false</durability>  
  16.       <recover>false</recover>  
  17.     <job-data-map allows-transient-data="true">  
  18.      <entry>  
  19.            <key>SCAN_DIR</key>  
  20.            <value>c:\quartz-book\input</value>  
  21.     </entry>  
  22.             </job-data-map>  
  23.     </job-detail>       
  24.          
  25.          <!--声明触发器-->  
  26.          <trigger>  
  27.         <simple>  
  28.         <name>scanTrigger</name><!--触发器的名字-->  
  29.         <group>DEFAULT</group>  
  30.         <job-name>ScanDirectory</job-name><!--触发器对于job-->  
  31.         <job-group>DEFAULT</job-group>  
  32.         <start-time><!--触发器的启动时间-->  
  33.              2005-06-10 6:10:00 PM  
  34.              </start-time>  
  35.              <!-- 重复执行次数和间隔时间-->  
  36.         <repeat-count>-1</repeat-count>  
  37.         <repeat-interval>10000</repeat-interval>  
  38.              </simple>  
  39.     </trigger>      
  40.         </job>  
  41. </quartz>  



当使用JobInitializationPlugin插件的时候,将会主到到classpath下去找quartz_jobs.xml文件并加 载进来 ,但若是咱们想有本身的配置文件的话,则须要额外的告诉调度器咱们如今要使用另外一个配置文件来实现做业的注册;下面的file目录就是咱们的新的配置文件 了;
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin      
org.quartz.plugin.jobInitializer.fileName = my_quartz_jobs.xml      
org.quartz.plugin.jobInitializer.overWriteExistingJobs = true     
org.quartz.plugin.jobInitializer.validating = false     
org.quartz.plugin.jobInitializer.overWriteExistingJobs = false     
org.quartz.plugin.jobInitializer.failOnFileNotFound = true    xml

相关文章
相关标签/搜索