服务器关闭后自动重新安排工作石英

时间:2012-08-10 08:58:42

标签: java quartz-scheduler

要求很简单,说服务器需要在01-01和01-10之间将变量salesOffRatio设置为0.8总共十天。并且“salesOffRatio = 0.8”是由石英触发器在01-10 00:00:00触发的作业。问题是服务器在01-05重新启动,因为电源不足,变量salesOffRatio将不再是0.8,它将变为初始值,触发器将不会触发,因为01-10 00:00:00已经过了。

有没有解决这类问题的解决方案?我需要自动重新安排,因为作业需要设置一个状态很长一段时间,服务器必须在该持续时间内重新启动,因为维护操作或类似无法避免的情况。

与jdbcJobStore失火似乎没问题,设置了适当的失火阈值。但它是普遍的,在这种情况下,我需要为每个工作设置不同的值(salesOffRatio1,salesOffRatio2 ......)

2 个答案:

答案 0 :(得分:1)

我提出的解决方案很少:

  1. 您的salesOffRatio应该在服务器重启后继续存在。将它存储在数据库,文件等等。而不是修改变量,而是在作业中更新数据库。

  2. 如果您的用例如此简单,为什么不创建一个函数

    double getSalesOffRatio(Date effectiveDate)
    

    会返回正确的salesOffRatio值,具体取决于effectiveDate已通过?换句话说,只需在每次需要时计算salesOffRatio。与读取getSalesOffRatio()内的当前系统时间相比,额外参数将使测试更容易。

  3. 您可以使用XML调度插件或其他方式在每次服务器重新启动时重新安排所有作业。默认情况下,作业在被触发后被删除(durable属性),因此通过仔细配置失火策略,调度程序将在启动时重新启动所有作业。我认为很脆弱。

  4. 最后的想法:谈论失火政策,您是否考虑过如果重新启动当作业被安排时会发生什么?

答案 1 :(得分:0)

您可以将'salesOffRatio'的值保存到数据库或文件中,然后将其初始化为存储值,而不是将其初始化为默认值。

或者,您可以在启动时运行程序以重新运行所有石英触发器(或者只是更新这些值所需的作业组中的那些)。