Как подписать разные каналы по спецификации? - PullRequest
0 голосов
/ 30 апреля 2020

Я ищу оператора переключения в 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();
    }

Это моя базовая реализация c, но она не работает. Функция для этого?

1 Ответ

1 голос
/ 30 апреля 2020

Если мы говорим о application.properties, то нет ничего, кроме условий в конфигурации. Смотрите @Value инъекцию в метод определения компонента: https://docs.spring.io/spring/docs/5.2.6.RELEASE/spring-framework-reference/core.html#beans -value-annotations

Итак, что-то вроде этого для вашего потокового компонента:

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

Чем вы действительно можете сделать это if...else инсайдером для subscription лямбды.

Другой способ - использовать @ConditionalOnProperty из Spring Boot и использовать эти flow1() и flow2() в качестве условного компонента.

Затем вы можете добавить IntegrationFlow в этот ваш бин flow() - тот же метод ввода аргументов метода, - и вам будет доступен только один из условных бинов.

В двух слова: все, что вы можете сделать с помощью внедрения зависимостей Spring, можно использовать, когда вы объявляете IntegrationFlow bean-компоненты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...