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 调度程序测试场景不工作的主要内容,如果未能解决你的问题,请参考以下文章