Как использовать IntegrationFlowContext как часть конфигурации процесса? - PullRequest
1 голос
/ 30 апреля 2020

как часть моей конфигурации процесса весенней загрузки, я создаю несколько очень похожих потоков интеграции.
Мой текущий код конфигурации выглядит следующим образом:

@Configuration
public class MyConfig {

    @Component
    public static class FlowFactory {
        public IntegrationFLow createFlow(String someValue) {
            return IntegrationFLows.from
            ...
            .get();
        }
    }

    @Bean
    public IntegrationFlow flow1(FlowFactory flowFactory) {
        return flowFactory.createFlow("1");
    } 
    @Bean
    public IntegrationFlow flow2(FlowFactory flowFactory) {
        return flowFactory.createFlow("2");
    } 
    @Bean
    public IntegrationFlow flow3(FlowFactory flowFactory) {
        return flowFactory.createFlow("3");
    } 

}

Как я могу заменить (в моем классе конфигурации ) эти жестко закодированные бобы с регистрацией l oop, использующей IntegrationFlowContext?
Может быть, что-то вроде ниже?

@Configuration
public class MyConfig {

    @Component
    public static class FlowFactory {

        FlowFactory(IntegrationFlowContext flowContext) {
            for (String someValue : ImmutableList.of("1","2","3") {
                flowContext.registration(createFLow(someValue)).register();    
            }
        }

        private IntegrationFLow createFlow(String someValue) {
            return IntegrationFLows.from
            ...
            .get();
        }
    }

}

Заранее большое спасибо за ваше время и ваш опыт.
С наилучшими пожеланиями

1 Ответ

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

Да, вы можете использовать IntegrationFlowContext, как это, но было бы лучше сделать это register() в @PostConstructor: есть много факторов, которые могут повлиять на то, как мы регистрируем бины, поэтому было бы лучше отложить регистрация потока, насколько это возможно.

Итак, на мой взгляд, это так:

@Component
public static class FlowFactory {
    private final IntegrationFlowContext flowContext;

    FlowFactory(IntegrationFlowContext flowContext) {
        this.flowContext = flowContext;
    }

    @PostConstruct
    public void init() {
        for (String someValue : ImmutableList.of("1","2","3") {
            this.flowContext.registration(createFLow(someValue)).register();    
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...