我正在尝试使用Camels SQL组件使用outputType = StreamList从数据库进行流传输。我从使用ConsumerTemplate的Java类获得ResultIterator:
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.jdbc.JdbcSQLException:该对象已关闭[90007-197]
经检查,我发现连接已关闭。连接= {HikariProxyConnection @ 16287}“ HikariProxyConnection @ 1048081993包装com.zaxxer.hikari.pool.ProxyConnection.ClosedConnection“
如何使用骆驼SQL组件进行流传输?我必须从不在骆驼路线内的bean中使用它。我看到只有在骆驼路线中使用SQL组件时,流传输才有效。
骆驼版本为:2.24.1
Update1:在查看源代码后,它是预期的。 onDone关闭连接。我试图在defaultExchange上设置UnitOfWork,以通过将交换标记为未完成来保持连接打开。
请勿使用receiveBody,而仅需接收即可返回Exchange
。然后,您可以从其消息主体中获得迭代器,使用之后,可以进行交换(请参阅javadoc)