企業級任務調度框架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

相關文章
相關標籤/搜索