Входящий адаптер JDBC, получающий только одну запись, а не все
Я использую следующий входящий адаптер JDBC, который получает сообщение. Есть еще один активатор, который контролирует канал и вызывает метод. Однако проблема в том, что активатор службы получает только одно "событие", а не все. Но запрос должен "выбрать *"
<int-jdbc:inbound-channel-adapter id="jdbcInboundAdapter"
channel="queueChannel" data-source="datasource"
auto-startup="true"
query="SELECT * FROM Event" row-mapper="eventResultMapper"
update-per-row="false">
<int:poller fixed-rate="5000">
</int:poller>
</int-jdbc:inbound-channel-adapter>
<int:service-activator input-channel="queueChannel" ref="eventActivator" method="doSomething">
</int:service-activator>
Я также пытался добавить max-row = "0" в адаптер, но это не помогло.
1 ответ
Решение
После дальнейшей отладки оказалось, что значение canProcessMessageList является ложным при создании ServiceActivatingHandler. Таким образом, активатор службы получает только одно событие, а не список.
Вот так выглядел мой активатор:
public void doSomething(Event event)
{
System.out.println("Processing event: " + event.getName());
}
Обновлен активатор со следующей подписью, и он работает:
public void doSomething(Collection<Event> events){
System.out.println("Processing event: " + events.size());
for (Event event: events){
System.out.print("***** " + event.getName());
}
}