如何按规格订阅不同的频道?

How to subscribe different channels by a specification?

我正在 Spring IntegrationFlows 中寻找切换运算符。我需要根据用户可以决定的 属性 订阅一个频道。

    @Bean
    public IntegrationFlow flow() {
        return IntegrationFlows
                .from()
                .publishSubscribeChannel(
                        subscription -> {
                            if (true)//user is going to decide this.
                                subscription.subscribe(flow1());
                            else
                                subscription.subscribe(flow2());
                        }
                )
                .get();
    }

这是我的基本实现,但它不起作用。这是一个功能吗?

如果说一个application.properties,那无非就是配置上的一个条件。查看一个 @Value 注入 bean 定义方法:https://docs.spring.io/spring/docs/5.2.6.RELEASE/spring-framework-reference/core.html#beans-value-annotations

所以,对于您的流 bean,像这样:

@Bean
public IntegrationFlow flow(Value("${your.prop}") String propValue) {

你确实可以做到 if...else insider a subscription lambda。

另一种方法是使用 Spring 引导中的 @ConditionalOnProperty 并将那些 flow1()flow2() 作为条件 bean。

然后您可以将 IntegrationFlow 注入到您的 flow() bean - 相同的方法参数注入技术,并且只有一个条件 bean 可供您使用。

简而言之:在声明 IntegrationFlow beans 时,可以使用 Spring 依赖注入所能做的一切。