配置 quartz.properties 文件

转载:http://www.360doc.com/content/13/0416/16/7669533_278656550.shtml
  1. ·配置 quartz.properties 文件  
  2.   
  3. 文件 quartz.properties 定义了 Quartz 应用运行时行为,还包含了许多能控制 Quartz 运转的属性。本章只会讲到它的基本配置;更多的高级设置将在以后讨论。在现阶段也不用太深入到每一项配置有效值的细节。  
  4.   
  5. 现在我们来看看最基础的 quartz.properties 文件,并讨论其中一些设置。代码 3.7 是一个修剪版的 quartz.propertis 文件。  
  6.   
  7. 注  
  8.   
  9.  Quartz 框架会为几乎所有的这些属性设定默认值。   
  10.   
  11. 代码 3.7. 基本的 Quartz Properties 文件  
  12.   
  13. #===============================================================       
  14. #Configure Main Scheduler Properties       
  15. #===============================================================         
  16. org.quartz.scheduler.instanceName = QuartzScheduler         
  17. org.quartz.scheduler.instanceId = AUTO       
  18.    
  19. #===============================================================       
  20. #Configure ThreadPool       
  21. #===============================================================         
  22. org.quartz.threadPool.threadCount =  5         
  23. org.quartz.threadPool.threadPriority = 5         
  24. org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool       
  25.    
  26. #===============================================================       
  27. #Configure JobStore       
  28. #===============================================================         
  29. org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore       
  30.    
  31. #===============================================================       
  32. #Configure Plugins       
  33. #===============================================================         
  34. org.quartz.plugin.jobInitializer.class =         
  35. org.quartz.plugins.xml.JobInitializationPlugin         
  36.         
  37. org.quartz.plugin.jobInitializer.overWriteExistingJobs = true        
  38. org.quartz.plugin.jobInitializer.failOnFileNotFound = true        
  39. org.quartz.plugin.jobInitializer.validating=false    
  40. #===============================================================     
  41. #Configure Main Scheduler Properties     
  42. #===============================================================      
  43. org.quartz.scheduler.instanceName = QuartzScheduler      
  44. org.quartz.scheduler.instanceId = AUTO     
  45.   
  46. #===============================================================     
  47. #Configure ThreadPool     
  48. #===============================================================      
  49. org.quartz.threadPool.threadCount =  5      
  50. org.quartz.threadPool.threadPriority = 5      
  51. org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool     
  52.   
  53. #===============================================================     
  54. #Configure JobStore     
  55. #===============================================================      
  56. org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore     
  57.   
  58. #===============================================================     
  59. #Configure Plugins     
  60. #===============================================================      
  61. org.quartz.plugin.jobInitializer.class =      
  62. org.quartz.plugins.xml.JobInitializationPlugin      
  63.      
  64. org.quartz.plugin.jobInitializer.overWriteExistingJobs = true     
  65. org.quartz.plugin.jobInitializer.failOnFileNotFound = true     
  66. org.quartz.plugin.jobInitializer.validating=false  
  67. 在代码 3.7 所示的 quartz.properties 文件中,属性被逻辑上分为了四部分。属性在写法上无须要求分组或按特定的顺序。有 # 的行是注释行。  
  68.   
  69. 注  
  70.   
  71. 这里讨论的并没有涉及到所有可能的设置,仅仅是一些基本的设置。也是你需要去熟悉的,能使声明式例子运转起来的必须的设置项。quartz.properties 中的所有属性配置将会分散在本书中的各章节中依据所在章节涉及内容详细讨论。   
  72.   
  73. ·调度器属性  
  74.   
  75. 第一部分有两行,分别设置调度器的实例名(instanceName) 和实例 ID (instanceId)。属性 org.quartz.scheduler.instanceName 可以是你喜欢的任何字符串。它用来在用到多个调度器区分特定的调度器实例。多个调度器通常用在集群环境中。(Quartz 集群将会在第十一章,“Quartz 集群”中讨论)。现在的话,设置如下的一个字符串就行:  
  76.   
  77. org.quartz.scheduler.instanceName = QuartzScheduler  
  78.   
  79. 实际上,这也是当你没有该属性配置时的默认值。  
  80.   
  81. 代码 3.7 中显示的调度器的第二个属性是 org.quartz.scheduler.instanceId。和 instaneName 属性一样,instanceId 属性也允许任何字符串。这个值必须是在所有调度器实例中是唯一的,尤其是在一个集群当中。假如你想 Quartz 帮你生成这个值的话,可以设置为 AUTO。如果 Quartz 框架是运行在非集群环境中,那么自动产生的值将会是 NON_CLUSTERED。假如是在集群环境下使用 Quartz,这个值将会是主机名加上当前的日期和时间。大多情况下,设置为 AUTO 即可。  
  82.   
  83. ·线程池属性  
  84.   
  85. 接下来的部分是设置有关线程必要的属性值,这些线程在 Quartz 中是运行在后台担当重任的。threadCount 属性控制了多少个工作者线程被创建用来处理 Job。原则上是,要处理的 Job 越多,那么需要的工作者线程也就越多。threadCount 的数值至少为 1。Quartz 没有限定你设置工作者线程的最大值,但是在多数机器上设置该值超过100的话就会显得相当不实用了,特别是在你的 Job 执行时间较长的情况下。这项没有默认值,所以你必须为这个属性设定一个值。  
  86.   
  87. threadPriority 属性设置工作者线程的优先级。优先级别高的线程比级别低的线程更优先得到执行。threadPriority 属性的最大值是常量 java.lang.Thread.MAX_PRIORITY,等于10。最小值为常量 java.lang.Thread.MIN_PRIORITY,为1。这个属性的正常值是 Thread.NORM_PRIORITY,为5。大多情况下,把它设置为5,这也是没指定该属性的默认值。  
  88.   
  89. 最后一个要设置的线程池属性是 org.quartz.threadPool.class。这个值是一个实现了 org.quartz.spi.ThreadPool 接口的类的全限名称。Quartz 自带的线程池实现类是 org.quartz.smpl.SimpleThreadPool,它能够满足大多数用户的需求。这个线程池实现具备简单的行为,并经很好的测试过。它在调度器的生命周期中提供固定大小的线程池。你能根据需求创建自己的线程池实现,如果你想要一个随需可伸缩的线程池时也许需要这么做。这个属性没有默认值,你必须为其指定值。  
  90.   
  91. ·作业存储设置  
  92.   
  93. 作业存储部分的设置描述了在调度器实例的生命周期中,Job 和 Trigger 信息是如何被存储的。我们还没有谈论到作业存储和它的目的;因为对当前例子是非必的,所以我们留待以后说明。现在的话,你所要了解的就是我们存储调度器信息在内存中而不是在关系型数据库中就行了。  
  94.   
  95. 把调度器信息存储在内存中非常的快也易于配置。当调度器进程一旦被终止,所有的 Job 和 Trigger 的状态就丢失了。要使 Job 存储在内存中需通过设置  org.quartz.jobStrore.class 属性为 org.quartz.simpl.RAMJobStore,就像在代码 3.7 所做的那样。假如我们不希望在 JVM 退出之后丢失调度器的状态信息的话,我们可以使用关系型数据库来存储这些信息。这需要另一个作业存储 (JobStore) 实现,我们在后面将会讨论到。第五章“Cron Trigger 和其他”和第六章“作业存储和持久化”会提到你需要用到的不同类型的作业存储实现。  
  96.   
  97. ·插件配置  
  98.   
  99. 在这个简单的 quartz.properties 文件中最后一部分是你要用到的 Quart 插件的配置。插件常常在别的开源框架上使用到,比如 Apache 的 Struts 框架(见 http://struts.apache.org)。  
  100.   
  101. 一个声明式扩框架的方法就是通过新加实现了 org.quartz.spi.SchedulerPlugin 接口的类。SchedulerPlugin  接口中有给调度器调用的三个方法。  
  102.   
  103. 注  
  104.   
  105. Quartz 插件会在第八章“使用 Quartz 插件”中详细讨论   
  106.   
  107. 要在我们的例子中声明式配置调度器信息,我们会用到一个 Quartz 自带的叫做 org.quartz.plugins.xml.JobInitializationPlugin 的插件。  
  108.   
  109. 默认时,这个插件会在 classpath 中搜索名为 quartz_jobs.xml 的文件并从中加载 Job 和 Trigger 信息。  
  110.   
  111. 在下一节中讨论 quartz_jobs.xml 文件,这是我们所参考的非正式的 Job 定义文件。  
  112.   
  113. 注  
  114.   
  115. 默认时,插件 JobInitializationPlugin 在 classpath 中寻找 quartz_jobs.xml 文件。你可以覆盖相应设置强制这个插件使用不同的文件名查找。要做到这个,你必须设置上一节讨论的 quartz.properties 中的文件名。目前,我们就使用默认的文件名 quartz_jobs.xml,至于如何修改 quartz.properties 中相应设置会在本章中后面讲到。   
  116.   
  117. ·使用 quartz_jobx.xml 文件  
  118.   
  119. 代码 3.8 就是目录扫描例子的 Job 定义的 XML 文件。正如代码 3.5 所示例子那样,这里我们用的是声明式途径来配置 Job 和 Trigger 信息的。  
  120.   
  121. 代码 3.8. ScanDirectory Job 的 quartz_jobs.xml  
  122.   
  123. <?xml version='1.0' encoding='utf-8'?>        
  124.         
  125. <quartz>        
  126.         
  127.   <job>        
  128.     <job-detail>        
  129.      <name>ScanDirectory</name>        
  130.      <group>DEFAULT</group>        
  131.      <description>        
  132.           A job that scans a directory for files         
  133.      </description>        
  134.      <job-class>        
  135.             org.cavaness.quartzbook.chapter3.ScanDirectoryJob         
  136.      </job-class>        
  137.      <volatility>false</volatility>        
  138.      <durability>false</durability>        
  139.      <recover>false</recover>        
  140.      <job-data-map allows-transient-data="true">        
  141.          <entry>        
  142.          <key>SCAN_DIR</key>        
  143.          <value>c:\quartz-book\input</value>        
  144.        </entry>        
  145.      </job-data-map>        
  146.     </job-detail>        
  147.         
  148.     <trigger>        
  149.      <simple>        
  150.        <name>scanTrigger</name>        
  151.        <group>DEFAULT</group>        
  152.        <job-name>ScanDirectory</job-name>        
  153.        <job-group>DEFAULT</job-group>        
  154.        <start-time>2005-06-10 6:10:00 PM</start-time>        
  155.        <!-- repeat indefinitely every 10 seconds -->        
  156.        <repeat-count>-1</repeat-count>        
  157.        <repeat-interval>10000</repeat-interval>        
  158.      </simple>        
  159.     </trigger>        
  160.         
  161.   </job>        
  162. </quartz>    
  163. <?xml version='1.0' encoding='utf-8'?>     
  164.      
  165. <quartz>     
  166.      
  167.   <job>     
  168.     <job-detail>     
  169.      <name>ScanDirectory</name>     
  170.      <group>DEFAULT</group>     
  171.      <description>     
  172.           A job that scans a directory for files      
  173.      </description>     
  174.      <job-class>     
  175.             org.cavaness.quartzbook.chapter3.ScanDirectoryJob      
  176.      </job-class>     
  177.      <volatility>false</volatility>     
  178.      <durability>false</durability>     
  179.      <recover>false</recover>     
  180.      <job-data-map allows-transient-data="true">     
  181.          <entry>     
  182.          <key>SCAN_DIR</key>     
  183.          <value>c:\quartz-book\input</value>     
  184.        </entry>     
  185.      </job-data-map>     
  186.     </job-detail>     
  187.      
  188.     <trigger>     
  189.      <simple>     
  190.        <name>scanTrigger</name>     
  191.        <group>DEFAULT</group>     
  192.        <job-name>ScanDirectory</job-name>     
  193.        <job-group>DEFAULT</job-group>     
  194.        <start-time>2005-06-10 6:10:00 PM</start-time>     
  195.        <!-- repeat indefinitely every 10 seconds -->     
  196.        <repeat-count>-1</repeat-count>     
  197.        <repeat-interval>10000</repeat-interval>     
  198.      </simple>     
  199.     </trigger>     
  200.      
  201.   </job>     
  202. </quartz>  
  203. <job> 元素描述了一个要注册到调度器上的 Job,相当于我们在前面章节中使用 scheduleJob() 方法那样。你所看到的<job-detail> 和  <trigger> 这两个元素就是我们在代码 3.5 中以编程式传递给方法 schedulerJob() 的参数。前面本质上是与这里一样的,只是现在用的是一种较流行声明的方式。你还可以对照着代码 3.5 中的例子来看在代码3.8 中我们是如何设置 SCAN_DIR 属性到 JobDataMap 中的。  
  204.   
  205. <trigger>元素也是非常直观的:它使用前面同样的属性,但更简单的建立一个 SimpleTrigger。因此代码 3.8 仅仅是一种不同的(可论证的且更好的)方式做了代码 3.5 中同样的事情。显然,你也可以支持多个 Job。在代码3.6 中我们编程的方式那么做的,也能用声明的方式来支持。代码 3.9 显示了与代码 3.6 可比较的版本  
  206.   
  207. 代码 3.9. 你能在一个 quartz_jobs.xml 文件中指定多个 Job  
  208.   
  209. <?xml version='1.0' encoding='utf-8'?>        
  210.         
  211. <quartz>        
  212.   <job>        
  213.     <job-detail>        
  214.      <name>ScanDirectory1</name>        
  215.      <group>DEFAULT</group>        
  216.      <description>        
  217.            A job that scans a directory for files         
  218.      </description>        
  219.      <job-class>        
  220.            org.cavaness.quartzbook.chapter3.ScanDirectoryJob         
  221.      </job-class>        
  222.      <volatility>false</volatility>        
  223.      <durability>false</durability>        
  224.      <recover>false</recover>        
  225.         
  226.      <job-data-map allows-transient-data="true">        
  227.      <entry>        
  228.        <key>SCAN_DIR</key>        
  229.          <value>c:\quartz-book\input1</value>        
  230.      </entry>        
  231.     </job-data-map>        
  232.   </job-detail>        
  233.         
  234.   <trigger>        
  235.     <simple>        
  236.      <name>scanTrigger1</name>        
  237.      <group>DEFAULT</group>        
  238.      <job-name>ScanDirectory1</job-name>        
  239.      <job-group>DEFAULT</job-group>        
  240.      <start-time>2005-07-19 8:31:00 PM</start-time>        
  241.      <!-- repeat indefinitely every 10 seconds -->        
  242.      <repeat-count>-1</repeat-count>        
  243.      <repeat-interval>10000</repeat-interval>        
  244.     </simple>        
  245.   </trigger>        
  246. </job>        
  247.         
  248. <job>        
  249.   <job-detail>        
  250.     <name>ScanDirectory2</name>        
  251.     <group>DEFAULT</group>        
  252.     <description>        
  253.           A job that scans a directory for files         
  254.     </description>        
  255.     <job-class>        
  256.           org.cavaness.quartzbook.chapter3.ScanDirectoryJob         
  257.     </job-class>        
  258.     <volatility>false</volatility>        
  259.     <durability>false</durability>        
  260.     <recover>false</recover>        
  261.         
  262.     <job-data-map allows-transient-data="true">        
  263.       <entry>        
  264.        <key>SCAN_DIR</key>        
  265.        <value>c:\quartz-book\input2</value>        
  266.      </entry>        
  267.     </job-data-map>        
  268.   </job-detail>        
  269.         
  270.   <trigger>        
  271.     <simple>        
  272.      <name>scanTrigger2</name>        
  273.      <group>DEFAULT</group>        
  274.      <job-name>ScanDirectory2</job-name>        
  275.      <job-group>DEFAULT</job-group>        
  276.      <start-time>2005-06-10 6:10:00 PM</start-time>        
  277.      <!-- repeat indefinitely every 15 seconds -->        
  278.      <repeat-count>-1</repeat-count>        
  279.      <repeat-interval>15000</repeat-interval>        
  280.     </simple>        
  281.   </trigger>        
  282.  </job>        
  283. </quartz>    
  284. <?xml version='1.0' encoding='utf-8'?>     
  285.      
  286. <quartz>     
  287.   <job>     
  288.     <job-detail>     
  289.      <name>ScanDirectory1</name>     
  290.      <group>DEFAULT</group>     
  291.      <description>     
  292.            A job that scans a directory for files      
  293.      </description>     
  294.      <job-class>     
  295.            org.cavaness.quartzbook.chapter3.ScanDirectoryJob      
  296.      </job-class>     
  297.      <volatility>false</volatility>     
  298.      <durability>false</durability>     
  299.      <recover>false</recover>     
  300.      
  301.      <job-data-map allows-transient-data="true">     
  302.      <entry>     
  303.        <key>SCAN_DIR</key>     
  304.          <value>c:\quartz-book\input1</value>     
  305.      </entry>     
  306.     </job-data-map>     
  307.   </job-detail>     
  308.      
  309.   <trigger>     
  310.     <simple>     
  311.      <name>scanTrigger1</name>     
  312.      <group>DEFAULT</group>     
  313.      <job-name>ScanDirectory1</job-name>     
  314.      <job-group>DEFAULT</job-group>     
  315.      <start-time>2005-07-19 8:31:00 PM</start-time>     
  316.      <!-- repeat indefinitely every 10 seconds -->     
  317.      <repeat-count>-1</repeat-count>     
  318.      <repeat-interval>10000</repeat-interval>     
  319.     </simple>     
  320.   </trigger>     
  321. </job>     
  322.      
  323. <job>     
  324.   <job-detail>     
  325.     <name>ScanDirectory2</name>     
  326.     <group>DEFAULT</group>     
  327.     <description>     
  328.           A job that scans a directory for files      
  329.     </description>     
  330.     <job-class>     
  331.           org.cavaness.quartzbook.chapter3.ScanDirectoryJob      
  332.     </job-class>     
  333.     <volatility>false</volatility>     
  334.     <durability>false</durability>     
  335.     <recover>false</recover>     
  336.      
  337.     <job-data-map allows-transient-data="true">     
  338.       <entry>     
  339.        <key>SCAN_DIR</key>     
  340.        <value>c:\quartz-book\input2</value>     
  341.      </entry>     
  342.     </job-data-map>     
  343.   </job-detail>     
  344.      
  345.   <trigger>     
  346.     <simple>     
  347.      <name>scanTrigger2</name>     
  348.      <group>DEFAULT</group>     
  349.      <job-name>ScanDirectory2</job-name>     
  350.      <job-group>DEFAULT</job-group>     
  351.      <start-time>2005-06-10 6:10:00 PM</start-time>     
  352.      <!-- repeat indefinitely every 15 seconds -->     
  353.      <repeat-count>-1</repeat-count>     
  354.      <repeat-interval>15000</repeat-interval>     
  355.     </simple>     
  356.   </trigger>     
  357.  </job>     
  358. </quartz>  
  359. ·为插件修改 quartz.properties 配置  
  360.   
  361. 在本章前面,告诉过你的是,JobInitializationPlugin 找寻 quartz_jobs.xml 来获得声明的 Job 信息。假如你想改变这个文件名,你需要修改 quartz.properties 来告诉插件去加载那个文件。例如,假如你想要 Quartz 从名为 my_quartz_jobs.xml 的 XML 文件中加载 Job 信息,你不得不为插件指定这一文件名。代码 3.10 显示了怎么完成这个配置;我们现在是最后一次在这里重复说明这一插件部分。  
  362.   
  363. 代码 3.10. 为 JobInitializationPlugin 修改 quartz.properties  
  364.   
  365. org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin         
  366.     
  367. org.quartz.plugin.jobInitializer.fileName = my_quartz_jobs.xml         
  368.         
  369. org.quartz.plugin.jobInitializer.overWriteExistingJobs = true        
  370. org.quartz.plugin.jobInitializer.validating = false        
  371. org.quartz.plugin.jobInitializer.overWriteExistingJobs = false        
  372. org.quartz.plugin.jobInitializer.failOnFileNotFound = true      
  373. org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin      
  374.   
  375. org.quartz.plugin.jobInitializer.fileName = my_quartz_jobs.xml      
  376.      
  377. org.quartz.plugin.jobInitializer.overWriteExistingJobs = true     
  378. org.quartz.plugin.jobInitializer.validating = false     
  379. org.quartz.plugin.jobInitializer.overWriteExistingJobs = false     
  380. org.quartz.plugin.jobInitializer.failOnFileNotFound = true    
  381. 在代码 3.10中,我们添加了属性 org.quartz.plugin.jobInitializer.fileName 并设置该属性值为我们想要的文件名。这个文件名要对 classloader 可见,也就是说要在 classpath 下。  
  382.   
  383. 当 Quartz 启动后读取 quartz.properties 文件,然后初始化插件。它会传递上面配置的所有属性给插件,这时候插件也就得到通知去搜寻不同的文件。  
  384.   
  385. 译者后记:  
  386. 想了又想,关于动词的 “Schedule” 还是选择“部署”,此前用的是“安排”,感觉不那么正式。当然英语中“部署”基本都用“Deploy”对应,平时与同事交流 Quartz 方面的技术都是说“往调度器上部署一个 Job”的,只要词能达意就行。  
  387.   
  388. 对于 “register with the Scheduler”,有时候是用的“通过调度器来注册”,有时候是“注册到调度器上”,意思基本一致的。   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Quartz是一个用于调度任务的开源框架。在使用Quartz时,可以通过配置属性文件quartz.properties来对其进行配置。默认情况下,Quartz会加载classpath下的quartz.properties文件作为配置属性,如果找不到该文件,则会使用Quartz框架自身jar包下的org/quartz目录中的quartz.properties文件。如果需要指定其他的属性配置文件,可以通过设置org.quartz.properties属性来指定。另外,也可以在调用StdSchedulerFactory的getScheduler()方法之前调用initialize(xx)方法来初始化factory配置。 如果在项目路径下存在quartz.properties文件,则会优先加载该文件进行配置。如果项目路径下不存在该文件,则会加载默认的quartz.properties文件,其默认路径和内容如下所示: 我们通常使用quartz.properties属性配置文件(默认情况下均使用该文件)结合StdSchedulerFactory来使用Quartz。StdSchedulerFactory会加载属性配置文件并实例化一个Scheduler。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [quartz.properties配置文件详解](https://blog.csdn.net/bobozai86/article/details/123777036)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Quartz的属性文件quartz.properties](https://blog.csdn.net/chengqiuming/article/details/84189195)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值