Я реализую собственный источник сообщений для извлечения данных. И когда я запускаю свой компонент приложения PollerMetadata, он не успевает инициализироваться до @InboundChannelAdapter и выдает исключение:
Caused by: java.lang.IllegalArgumentException: No poller has been defined for channel-adapter 'statusFlow.org.springframework.integration.config.SourcePollingChannelAdapterFactoryBean#0', and no default poller is available within the context.
Мой код:
@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?




Согласно вашему исключению, история не об этом @InboundChannelAdapter, а что-то вроде IntegrationFlows.from(statusSource()).
В этом случае вам необходимо настроить опрашивающее устройство для определения DSL:
@Bean
IntegrationFlow yourFlow(PollerMetadata myPollerMetadata) {
return IntegrationFlows.from(statusSource(), e -> e.poller(myPollerMetadata))
Аннотация @InboundChannelAdapter не имеет смысла для определения Java DSL и IntegrationFlow.