InboundChannelAdapter 的正确启动方式

Correct way to start InboundChannelAdapter

我正在使用基于注释的

@Bean
public MessageChannel channel() {
    return new DirectChannel();
}


@Bean
@InboundChannelAdapter(value = "channel",poller = @Poller(fixedDelay="1000"))
public MessageSource<?> inbound() {}

完美运行。

但是现在我不想让它自动启动,正确的方法是什么start/stop?
p.s.
我没有使用 IntegrationFlow。

查看 @InboundChannelAdapter 个属性:

/**
 * {@code SmartLifecycle} options.
 * Can be specified as 'property placeholder', e.g. {@code ${foo.autoStartup}}.
 * @return if the channel adapter is started automatically or not.
 */
String autoStartup() default "true";

因此,false 它不会自动启动。 您需要手动将服务中某处的 SourcePollingChannelAdapter bean 自动装配到 start() 它。

请参阅 @EndpointId 注释与 @InboundChannelAdapter 放在一起。

或者您可以使用控制总线模式来执行 start() 命令:

https://docs.spring.io/spring-integration/docs/current/reference/html/system-management.html#control-bus

https://docs.spring.io/spring-integration/docs/current/reference/html/configuration.html#annotations

与 Java DSL 不会有太大区别,除非您不需要搜索 @EndpointId,因为 EdnpointSpec 上有明显的 id() =] 与 poller().

一起暴露