2015-10-13 1 views
1

Возможно ли зарегистрировать MessageSources во время выполнения с помощью функции spring-integration-dsl?Spring Integration DSL Динамический входящий канал

В моем случае я хочу создать несколько FileReadingMessageSources (на основе входных данных из пользовательского интерфейса), а затем отправить полезную нагрузку на определенный канал/JMS маршрут (который считывается из метаданных или ввода данных пользователем)

Другой вопрос, возможно ли динамически регистрировать IntegrationFlows?

ответ

2

Это немного сложнее и требует некоторых знаний Spring инфраструктуры, но да это возможно:

@Service 
public static class MyService { 

    @Autowired 
    private AutowireCapableBeanFactory beanFactory; 

    @Autowired 
    @Qualifier("dynamicAdaptersResult") 
    PollableChannel dynamicAdaptersResult; 

    public void pollDirectories(File... directories) { 
     for (File directory : directories) { 
      StandardIntegrationFlow integrationFlow = IntegrationFlows 
        .from(s -> s.file(directory), 
          e -> e.poller(p -> p.fixedDelay(1000)) 
            .id(directory.getName() + ".adapter")) 
        .transform(Transformers.fileToString(), 
          e -> e.id(directory.getName() + ".transformer")) 
        .channel(this.dynamicAdaptersResult) 
        .get(); 
      this.beanFactory.initializeBean(integrationFlow, directory.getName()); 
      this.beanFactory.getBean(directory.getName() + ".transformer", Lifecycle.class).start(); 
      this.beanFactory.getBean(directory.getName() + ".adapter", Lifecycle.class).start(); 
     } 
    } 

} 

Исследуйте это мой образец, пожалуйста, и дайте мне знать, что это не ясно для вас.

+0

Большое спасибо, это именно то, что я искал – Akroma