Quartz 调度程序测试场景不工作

Posted

技术标签:

【中文标题】Quartz 调度程序测试场景不工作【英文标题】:Quartz Scheduler Testing scenario not working 【发布时间】:2016-10-25 16:27:13 【问题描述】:

我将quartz scheduler 与我的spring 应用程序一起使用。到目前为止一切正常,但是在将来测试计划的作业时,假设从现在开始一个月,我安排了一个作业,然后将我的 linux 机器的系统时间更改为那天和触发器应该触发前 5 分钟.我等着,扳机开火时间来了又去,但没有开火。我能够测试的另一种方法是更改​​ oracle 表中的触发时间,这样我们就不需要更改系统时间。当我安排第二天 4 点的工作时,它也可以工作(无需更改任何日期,但我等了 24 小时才开始工作,结果确实如此)。我不明白为什么加速系统时间不适用于石英。任何解释都会有所帮助。谢谢!

P.S:我使用的是quartz 的核心库,而不是spring 集成的quartz 库。

【问题讨论】:

Quartz 调度程序可能会在它启动时获取系统时间并维护它自己的时钟/计数器。您更改系统时间的事实永远不会被 Quartz 接收,因为 Quartz 正在使用它自己的时钟/计数器值。真正验证它的唯一方法是浏览 Quartz 源代码... @lincolnadym 这将很难检测到。当我更改系统时间时,我重新启动调度程序并且日志显示更新的日期时间。 【参考方案1】:

在此花费了相当长的时间后,我启用了 org.quartz 的日志,发现在应用加载时 quartz 未初始化。以下 sn -p 会在启动时初始化quartz

    <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>start-scheduler-on-load</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>2</load-on-startup>
    </servlet>

【讨论】:

以上是关于Quartz 调度程序测试场景不工作的主要内容,如果未能解决你的问题,请参考以下文章

Quartz 集成测试和事务

quartz作业调度的应用和原理

org.quartz.SchedulerException:调度程序已在 Magnolia 中关闭

Quartz--简单示例

Quartz简介

在Quartz调度程序中使用@DisallowConcurrentExecution