我有一个由 cron 表达式触发的 spring 集成流程,如下所示:
<int-ftp:inbound-channel-adapter id="my-input-endpoint" ...>
<int:poller trigger="my-trigger"/>
</int-ftp:inbound-channel-adapter>
<bean id="my-trigger"
class="org.springframework.scheduling.support.CronTrigger">
<constructor-arg value="0 * * * * *" />
</bean>
效果很好。但现在我必须扩展实现以使其做好集群准备(同一时间点仅在一个集群节点上执行作业)。
我的愿望是在集群模式下使用 Quartz 框架(将作业状态保存在数据库中)来触发此集成流程。 Quartz 提供了一个漂亮的开箱即用的解决方案。唯一的问题是如何将 Quartz 与现有的 inbout-channer-adaptor 集成? “poller”的“trigger”属性只接受org.springframework.scheduling.Trigger的子类。我找不到“轮询器触发器”和 Quartz 框架之间的任何桥梁。
提前谢谢了!
这是一种方法...
将入站适配器上的自动启动属性设置为 false。
创建一个仅立即触发一次的自定义触发器...
public static class FireOnceTrigger implements Trigger {
boolean done;
public Date nextExecutionTime(TriggerContext triggerContext) {
if (done) {
return null;
}
done = true;
return new Date();
}
public void reset() {
done = false;
}
}
在您的石英工作中,获取触发器和SourcePollingChannelAdapter
.
当石英触发器触发时,进行石英工作
- 适配器.stop()
- 触发.重置()
- 适配器.start()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)