我有一个由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框架(在数据库中持久化作业状态)来触发这个集成流。石英提供了一个漂亮的解决方案,开箱即用。唯一的问题是如何整合石英与现有的内置通道适配器?poller的“trigger”属性只接受org.springframework.scheduling.trigger的子类。我找不到“poller触发器”和Quartz框架之间的任何桥梁。
提前谢谢了!
这是一种方法
将入站适配器上的auto-startup属性设置为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; } }
在quartz作业中,获取对触发器和SourcePollingChannelAdapter的引用。
SourcePollingChannelAdapter
石英扳机点火时,进行石英作业