Spring集成动态触发器与cron表达式

时间:2015-07-13 13:12:34

标签: spring-batch spring-integration

我在github中看到了示例动态触发器并且它使用固定速率/延迟但是可以使用cron表达式实现动态触发器,其中一旦使用自定义退出代码完成作业,我们希望cron表达式以这样的方式不再对当天进行民意调查或更改cron expressin以从差异时间开始轮询。

2 个答案:

答案 0 :(得分:0)

不幸的是org.springframework.scheduling.support.CronTrigger使用final字段,因此我们无法在运行时更改其状态。因此,寻求改变cron-expression价值的方法的任何想法都是浪费时间。

从其他人那里看一下这只是一个time producer解决方案,通知调度程序何时启动提供的任务。

换句话说,这是一个Trigger合同源代码:

public interface Trigger {

    Date nextExecutionTime(TriggerContext triggerContext);

}

因此,我们的解决方案必须提供的只是为每个Date调用返回特定的nextExecutionTime

此处您需要做的只是符合您要求的dynamic trigger实施。

是的,达到类似cron的行为可能有点困难,但现在没有你的选择......

虽然您可以在任务后stop()进行适配,但请为其注入新的CronTrigger并再次start()

答案 1 :(得分:0)

您可以编写一个简单包装CronTrigger的自定义触发器,您可以随意替换代理CronTrigger

但是,Trigger机制的限制是您无法更改现有计划。

如果在轮询器线程上运行作业,则可以在轮询器线程返回之前更改触发器(并调用触发器以查找下一个执行时间)。

Spring Integration 4.2(目前在里程碑2)有conditional pollers,这将使这样的事情变得更容易。