如何在 Camel sql 消费者中开始交易并进一步使用它

How to start transaction in Camel sql consumer and use it further

我正在使用 Camel 将 Spring 引导应用程序与其他域集成。 我有一个使用 SQL 组件配置的简单路由,用于轮询和更新数据库:

from("sql:"+selectSQL+"?consumer.delay=20000&onConsume="+updateSQL)
   .log("---select sql done")
   .to("sql:" + insertSQL);

和SQL是这样的:

String selectSQL = "SELECT * FROM T1 WHERE PROCESSED is null and ROWNUM <4 for update skip locked";
String updateSQL = "update T1 set PROCESSED='TRUE' where id = :#id";
String insertSQL = "insert into T2 (col_name...) values (col_value...)";

我希望这些 SQLs 到 运行 在单个轮询请求的 1 个事务中。我知道我可以让路线与 .transacted("propagationPolicy") 交易,但我不能把它放在 from.

之前

是否可以让每次轮询尝试都具有事务性?

PS。我有一个计时器组件的解决方法,每个 SQL 都有单独的路由,但我想知道是否可以仅使用上述 1 条路由来解决我的问题。

在深入研究了 Camel 文档和源代码后,我得出结论,我所要求的是不可能实现的。所以让我 post 我的解决方法。
想法是使用其中一个具有调度功能的组件,例如 timer 组件。可以启动下一个事务,其中完成了所有数据库操作:

from("timer:pollingTimer?period=20s")
    .transacted("propagationRequired")
    .to("sql:" + selectSQL)
    .to("sql:" + updateSQL)
    .to("sql:" + insertSQL)
    .log("processing is done");

最终可以在数据库操作之间应用一些处理器来正确处理选定的行。