0

要求很简单,假设服务器需要在 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 ...)

4

2 回答 2

1

我想出的几个解决方案:

  1. salesOffRatio应该在服务器重新启动后幸存下来。将其存储在数据库、文件等中。不要修改变量,而是在作业中更新您的数据库。

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

    double getSalesOffRatio(Date effectiveDate)
    

    salesOffRatio这将根据effectiveDate传递返回正确的值?换句话说,只需在salesOffRatio每次需要时进行计算。顺便说一句,与读取当前系统时间相比,额外的参数将使测试更容易getSalesOffRatio()

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

最后的想法:谈到失火策略,您是否考虑过如果在安排作业时发生重启会发生什么?

于 2012-08-13T20:44:07.390 回答
0

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

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

于 2012-08-10T09:26:15.407 回答