石英服务器下载后自动重新调度作业

问题描述:

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

几个解决方案,我想出了:

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

  2. 如果你的用例就是这么简单,为什么不创建一个功能

    double getSalesOffRatio(Date effectiveDate) 
    

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

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

最后的思考:在谈论失火的政策,你认为如果在作业计划重启时会发生什么?

+0

在我的实际项目中,数据需要改变太多,将它们包装在功能中是不切实际的。而且它们是由其他服务器共享的元数据,在db中复制它们是麻烦的,它在元数据改变时涉及到一个问题,我需要更新所有复制的数据。 – jean 2012-08-16 06:24:58

+0

我认为唯一的办法是在服务器重启时手动检查并重新安排时间。由作业触发的所有更改都不会持久,并且不需要在事务中进行。所以重新启动对执行作业没有坏处 – jean 2012-08-16 06:31:24

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

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