java - 如何通过控制总线启动入站 channel 适配器?

标签 java spring spring-integration

我尝试通过控制总线启动文件入站 channel 适配器,但在 ExpressionCommandMessageProcessor 尝试解析我的命令时遇到异常。

这是我的入站 channel 适配器配置:

@Bean(name = "inboundChannelAdapter")
public IntegrationFlow inputFilesReadingFlow()
{
         return IntegrationFlows
                  .from(s -> s.file(new File(inputDirectory))
                              .filter(new AcceptAllFileListFilter<File>()),
                        e -> e.poller(Pollers.fixedDelay(FILE_POLLER_RATE))
                              .autoStartup(false)
                       )
                  .handle(messageProcessingService)
                  .channel(fileOutputChannel)
                  .get();
}

@Bean
public IntegrationFlow controlBusFlow()
{
    return IntegrationFlows.from("controlBusChannel").controlBus().get();
}

在我的集成测试中,我有自动连线控制总线 bean:

@Autowired
private MessageChannel controlBusChannel;

@Test
public void testInboundChannelAdapter() 
{
    controlBusChannel.send(new GenericMessage<String>("@'inboundChannelAdapter.<property_name_placeholder>'.start()")); // ????

    // .....
}

所以我想问一下如何访问“适配器”bean(或负责启动/停止操作的任何 bean)来启动轮询过程。

谢谢。

最佳答案

.autoStartup(false) 一起,您可以找到简单的 .id() Hook 。

这样您就可以通过 ControlBus 启动所需的 SourcePollingChannelAdapter:

 controlBusChannel.send(new GenericMessage<>("@myFilePollingAdapter.start()")); 

您感到困惑的是,IntegrationFlow 表示其一堆 Bean 的容器,并且不允许访问它们,因为它们无论如何都注册为顶级 Bean。

尽管从 1.2 版本开始 StandardIntegrationFlow 已经是 SmartLifecycle,所以,您确实可以启动/停止所有内容立即那些相关的 bean 。包括第一个文件轮询器。

关于java - 如何通过控制总线启动入站 channel 适配器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39111415/

相关文章:

java - java关键字和字面量的区别

java - 如何在 Spring Boot XML 文件中注册一个 servlet?

java - 带有注释的 Spring Integration SpEL 问题

spring-integration - Spring 集成异常忽略 int-jms :message-driven-channel-adapter 上的容器设置

java - 了解 Java 中的泛型方法

java - Angular4 路由在 IE 中不工作,而在 Mozilla 和 chrome 中工作正常

Java Apache Poi SXSSF 与 Excel 宏

spring - 将 Spring Security 全局方法安全性与 Keycloak 集成

java - Spring 4在异步任务完成时更改jsp

java - 无法在 spring-integration 4.1.x 中将 String 值转换为 ExpressionEvaluatingRequestHandlerAdvice 的表达式