当冬季时间发生变化时,石英不会运行作业

时间:2016-12-12 10:44:49

标签: java cron quartz-scheduler

在我们的系统中,有多个石英(石英2.2.2)时间表和工作,与这些时间表相关联。

冬季时间变化(DST)发生时出现问题。冬季时间更改将时间设置为凌晨02:00(柏林)上午02:00。

这意味着那天晚上02:00凌晨2点。但是,quartz api不支持DST。它跳过凌晨2点,并在凌晨03:00继续。他们在documentation说,处理它。

凌晨01:00 - 正常工作
凌晨02:00 - 跳过
凌晨02:00 - 正常工作
凌晨03:00 - 正常工作

在我们的系统中,我们没有机会在另一时间设置计时器,必须触发作业。

我已经在互联网上阅读了几乎所有的答案,并没有找到合适的解决方案来解决这个问题。最合乎逻辑的答案(ron的答案)是this但是,我无法扩展CronExpression类,这是最终的。可能,它在以前的版本中不是最终的。

优雅与否,我在等待(并欣赏)所有可能的答案。

1 个答案:

答案 0 :(得分:0)

我用自己的混合解决方案解决了这个问题。

主要是,在完成作业的类(实现Job接口的那些)中,我总是检查下次何时触发作业。如果它是在十月的最后一个星期日02:00(冬天的变化发生在十月的最后一个星期天),我用一个简单的触发器(不受夏令时变化影响)重新安排作业,并且序列化原始触发器,在03:00之后,我使用原始cron触发器重新安排作业。

我知道这不是理想的解决方案,但我认为这是解决这个问题的最佳解决方案之一。