PollerMetadata имеет значение null, когда мы используем пользовательские pollerMetadata в @InboundChannelAdapter - PullRequest
0 голосов
/ 11 марта 2019

Я реализую собственный источник сообщений для извлечения данных. И когда я запускаю бин приложения, PollerMetadata не успевает инициализироваться раньше @InboundChannelAdapter и выдает исключение:

Причина: java.lang.IllegalArgumentException: не определен поллер для адаптера канала 'statusFlow.org.springframework.integration.config.SourcePollingChannelAdapterFactoryBean # 0', и поллер по умолчанию недоступен в контексте.

Мой код:

@Bean("myTrigger")
public PeriodicTrigger periodicTrigger() {
    PeriodicTrigger trigger = new PeriodicTrigger(2000);
    trigger.setFixedRate(true);
    return trigger;
}

@Bean("myPollerMetadata")
public PollerMetadata currentRackStatusLandingFlowPollerMetadata(@Qualifier("myTrigger") PeriodicTrigger trigger) {
    PollerMetadata metadata = new PollerMetadata();
    metadata.setTrigger(trigger);
    metadata.setMaxMessagesPerPoll(1);
    return metadata;
}

@InboundChannelAdapter(poller = @Poller(value = "myPollerMetadata"))
public MessageSource<List<Status>> statusSource() {
    return () -> new DefaultMessageBuilderFactory()
            .withPayload(statusService.getCurrentStatuses())
            .build();
}

Мой вопрос:

Как настроить PollerMetadata для @InboundChannelAdapter?

1 Ответ

1 голос
/ 11 марта 2019

Согласно вашему исключению, история не об этом @InboundChannelAdapter, а о чем-то вроде IntegrationFlows.from(statusSource()).

В этом случае вам нужно настроить опрашивающее устройство на определение DSL:

@Bean
IntegrationFlow yourFlow(PollerMetadata myPollerMetadata) {
    return IntegrationFlows.from(statusSource(), e -> e.poller(myPollerMetadata))

Аннотация @InboundChannelAdapter не имеет смысла для определения Java DSL и IntegrationFlow.

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