骆驼:如何使用StreamList从SQL组件流式传输a

问题描述 投票:0回答:1

我正在尝试使用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,以通过将交换标记为未完成来保持连接打开。

java database apache-camel streaming
1个回答
0
投票

请勿使用receiveBody,而仅需接收即可返回Exchange。然后,您可以从其消息主体中获得迭代器,使用之后,可以进行交换(请参阅javadoc)

© www.soinside.com 2019 - 2024. All rights reserved.