Я пытаюсь использовать компонент Camels SQL для потоковой передачи из базы данных с использованием outputType = StreamList. Я получаю ResultIterator из класса Java с ConsumerTemplate:
public Flux<String> CreateFlux () {
ConsumerTemplate consumer = camelContext.createConsumerTemplate();
ResultSetIterator resultSetIterator = consumer.receiveBody(
"sql:SELECT DATA FROM TRANSAKSJON WHERE REQ_ID='" + recId + "'?outputType=StreamList", ResultSetIterator.class);
...
while (result.hasNext()) {
Map<String, String> map = (Map<String, String>) result.next();
String data = map.get("DATA");
}
}
При попытке выполнить итерацию ResultsetIterator я получаю следующую ошибку:
org.h2.jdb c .JdbcSQLException : Объект уже закрыт [90007-197]
После проверки я вижу, что соединение закрыто. connection = {HikariProxyConnection@16287} "HikariProxyConnection@1048081993 упаковка com.zaxxer.hikari.pool.ProxyConnection.ClosedConnection"
Как использовать компонент camel SQL для потоковой передачи? Я должен использовать его из бобов, которых нет в верблюжьем маршруте. Я вижу, что потоковая передача работает, только если я использую компонент SQL внутри верблюжьего маршрута.
Версия верблюда: 2.24.1
Обновление 1: после просмотра исходного кода он предназначен. onDone закрывает соглашение. Я пытаюсь настроить UnitOfWork на свой defaultExchange, чтобы держать соединение открытым, пометив обмен как не выполненный.
Update2: удалось заставить его работать, установив UnitOf Work:
ProducerTemplate pTmp = camelContext.createProducerTemplate();
DefaultExchange defaultExchange = new DefaultExchange(camelContext);
UnitOfWork unitOfWork = new DefaultUnitOfWork(defaultExchange);
defaultExchange.setUnitOfWork(unitOfWork);
pTmp.send("direct:DbStream", defaultExchange);
Маршрут DbStream выполняет SQL выбор, описанный выше