Spring IntegrationFlow 不允许并发执行

Spring IntegrationFlow Disallow Concurrent Execution

有没有一种方法可以指示 Spring IntegrationFlow DSL 避免并发执行,例如 - 第一个 运行 仍未完成,但是根据轮询器,现在是第二个 运行?类似于我们在 Spring Batch Quartz 调度程序中使用的 @DisallowConcurrentExecution。

谢谢

为了避免从轮询通道适配器并发执行,您真的不能使用任何可能导致并行的东西。第一:不要对轮询任务使用 TaskExecutor。第二,不要使用 fixedRate 而只使用 fixedDelay。第二个的行为方式是仅在前一个轮询任务完成时才安排下一个轮询任务。如果您不将工作转移到其他线程(参见 TaskExecutor),任何事情都将在同一个计划线程上执行。

从技术上讲,如果您只使用 fixedDelay 作为轮询器并且没有配置更多其他选项,那么默认情况下您所要求的是默认设置。

尽管您需要记住,您的其余流程也必须是直接的:没有使用 ExecutorChannelQueueChannel

如果您仍然无法使流程直接和阻塞,另请参阅条件轮询文档:https://docs.spring.io/spring-integration/docs/current/reference/html/core.html#conditional-pollers