要求很简单,比如说服务器需要在总共十天的01-01和01-10之间将变量salesOffRatio设置为0.8。 “ salesOffRatio = 0.8”是由石英触发器在01-10 00:00:00触发的作业。问题是由于电源不足,服务器将在01-05重新启动,变量salesOffRatio将不再是0.8,它将变为init值,并且触发器不会触发,因为已通过01-10 00:00:00。
有解决此类问题的解决方案吗?我需要自动重新计划,因为作业需要设置很长时间的状态,并且由于维护操作或类似无法避免的事情,服务器必须在该时间内重新启动。
使用jdbcJobStore点火失败似乎可以,请设置适当的点火失败阈值。但这是通用的,在这种情况下,我需要为每个作业设置不同的值(salesOffRatio1,salesOffRatio2 ...)
最佳答案
我想到的解决方案很少:
您的salesOffRatio
应该在服务器重新启动后仍然存在。将其存储在数据库,文件等中。无需修改变量,而是在作业中更新数据库。
如果您的用例是如此简单,为什么不创建一个函数
double getSalesOffRatio(Date effectiveDate)
会根据传递的
salesOffRatio
返回正确的effectiveDate
值?换句话说,每次需要时都可以计算salesOffRatio
。顺便说一句,与读取getSalesOffRatio()
中的当前系统时间相比,额外的参数将使测试更加容易。您可以使用XML计划插件或其他任何方式在每次服务器重新启动时重新计划所有作业。默认情况下,作业在被触发后会被删除(
durable
属性),因此通过仔细配置断火策略,调度程序将在启动时重新启动所有作业。我觉得很脆弱。最后的想法:谈论失火政策,您是否考虑过在安排作业时重新启动会发生什么?