一尘不染

spring integration + cron + quartz in cluster?

spring

我有一个由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框架之间的任何桥梁。

提前谢谢了!


阅读 386

收藏
2020-04-17

共1个答案

一尘不染

这是一种方法

将入站适配器上的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的引用。

石英扳机点火时,进行石英作业

  • adapter.stop()
  • trigger.reset()
  • adapter.start()
2020-04-17