集群中的弹簧集成+ cron + quartz?

mar*_*rc7 8 spring triggers spring-integration quartz-scheduler

我有一个由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>
Run Code Online (Sandbox Code Playgroud)

它工作正常.但是现在我必须扩展实现以使其集群就绪(在同一时间点仅在一个集群节点上执行作业).

我希望在集群模式下使用Quartz框架(在数据库中保持作业状态)来触发此集成流程.Quartz提供了一个开箱即用的漂亮解决方案.唯一的问题是如何将Quartz与现有的inbout-channer-adapter集成?"poller"的"trigger"属性只接受org.springframework.scheduling.Trigger的子类.我找不到"poller trigger"和Quartz框架之间的任何桥梁.

提前谢谢了!

Gar*_*ell 7

这是一种方式......

将入站适配器上的自动启动属性设置为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;
    }
}
Run Code Online (Sandbox Code Playgroud)

在您的石英作业中,获取对触发器的引用SourcePollingChannelAdapter.

当石英触发器发射时,有石英工作

  1. adapter.stop()
  2. trigger.reset()
  3. adapter.start()