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

1.quartz.properties

    Quartz最重要的配置文件就是quartz.properties;它决定了quartz的运行情况;其中包括了Quartz 应用运行时行为,以及运行过程中相关属性;

下面我们将大致描述下quartz.properties的相关配置项:

1)1)Configure Main Scheduler Properties ---·调度器属性

  1. org.quartz.scheduler.instanceName = QuartzScheduler

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

  1. org.quartz.scheduler.instanceId = AUTO

实例 ID (instanceId),调度器的第二个属性是 org.quartz.scheduler.instanceId和
instaneName 属性一样,instanceId
属性也允许任何字符串。这个值必须是在所有调度器实例中是唯一的,尤其是在一个集群当中。假如你想 Quartz 帮你生成这个值的话,可以设置为
AUTO。如果 Quartz 框架是运行在非集群环境中,那么自动产生的值将会是

NON_CLUSTERED。假如是在集群环境下使用 Quartz,这个值将会是主机名加上当前的日期和时间。大多情况下,设置为 AUTO 即可。

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

  1. org.quartz.threadPool.threadCount =  5

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

  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,这也是没指定该属性的默认值。

  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  ---作业存储设置 

  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     --插件配置

  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作业的相关信息是在将作业注册到任务调度器的时候,通过编程的方式来事项初始化的;

    现在我们要通过配置文件的时候来完成作业信息初始化的动作;所以我们要将初始化的信息在配置文件上进行体现;

  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. <trigger>
  26. <simple>
  27. <name>scanTrigger</name><!--触发器的名字-->
  28. <group>DEFAULT</group>
  29. <job-name>ScanDirectory</job-name><!--触发器对于job-->
  30. <job-group>DEFAULT</job-group>
  31. <start-time><!--触发器的启动时间-->
  32. 2005-06-10 6:10:00 PM
  33. </start-time>
  34. <!-- 重复执行次数和间隔时间-->
  35. <repeat-count>-1</repeat-count>
  36. <repeat-interval>10000</repeat-interval>
  37. </simple>
  38. </trigger>
  39. </job>
  40. </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

最新文章

  1. Oracle 过程中检查数据表存在与否
  2. STM32 串口固件库中定义的几个中断标志位什么意思?
  3. django redirect的几种方式
  4. 使用imap协议接收邮件
  5. snprintf 返回值
  6. Android 高级UI设计笔记07:RecyclerView 的详解
  7. eclipse引用头文件报错问题-解决方法
  8. SqlBulkCoy和普通数据库操作执行速度对比
  9. clang: error: invalid deployment target for -stdlib=libc++ (requires iOS 5.0 or later)
  10. Angulajs 定时器使用
  11. 洛谷-求同构数的个数-NOIP2013提高组复赛
  12. python函数练习题
  13. HTML5效果:实现树叶飘落
  14. Android之Wifi学习(1)
  15. 关于一台机器部署多个tomcat的小记
  16. saltstack系列~第二篇
  17. mysql垂直分区和水平分区
  18. centos网络配置(手动设置,自动获取)的2种方法3
  19. WCF教程网址
  20. codeforces 98 div2 C.History 水题

热门文章

  1. 调用的方法里接收一个List&lt;&gt;类型的参数,里面是自定义的EC类, 我要通过反射构建这List对象
  2. Ubuntu14.043下QT5.5的安装与一点问题
  3. [bzoj2242][Sdoi2011]计算器_exgcd_BSGS
  4. java反射意义
  5. [Drupal]主题教程
  6. 零基础学python-2.16 列表解析
  7. 用hadoop实现SimRank++算法(1)----权值转移矩阵的计算
  8. Android端 配置极光推送
  9. POJ2184 Cow Exhibition 背包
  10. [AHOI 2008] 聚会