Spring 集成动态入站渠道

Spring Integration Dynamic Inbound Channel

通过 Spring 集成,是否可以在程序运行时动态创建额外的入站通道适配器?

背景: 我对 SI 和 S-Batch 很陌生。我正在使用 SI 来轮询我们的数据库以获取我用来在 SB 中创建工作的信息。本质上,对于何时需要将我从数据库中提取的记录转化为工作,存在一些业务规则。我计划为每个规则制作一个入站通道适配器。例如,项目初始状态的规则是:

<int-jdbc:inbound-channel-adapter query="select [id] from [MY_DATA] where status_name = 'INITIAL'" .... />

我计划检索规则信息并将它们解析为适配器。我将从数据库中检索 status_name "INITIAL" 并使用它来构建适配器,而不是上面的硬编码规则。

是的,你可以做到。您应该实例化 SourcePollingChannelAdapter 并为其设置 MessageSource<?> 和其他重要选项,例如 beanFactoryoutputChannel。之后你应该start()第一个开始投票。

但是……有这个必要吗?请更具体一点。这样做的原因是什么?

也许还有另一种托管组件的解决方案?..

更新

SourcePollingChannelAdapter是管理轮询(调度)和MessageChannel的主要组件。生产消息的艰巨任务就落在了MessageSource<?>的肩上。对于您的 JDBC 案例,有 JdbcPollingChannelAdapter.

是的,您应该为那些动态适配器注入您的服务 BeanFactory,也许 MessageChannel。我不确定您能否将动态适配器填充回应用程序上下文。

有关详细信息,请参阅此示例:https://github.com/spring-projects/spring-integration-samples/tree/master/advanced/dynamic-ftp