Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 如何在Camel sql consumer中启动事务并进一步使用它_Spring_Spring Boot_Transactions_Apache Camel_Camel Sql - Fatal编程技术网

Spring 如何在Camel sql consumer中启动事务并进一步使用它

Spring 如何在Camel sql consumer中启动事务并进一步使用它,spring,spring-boot,transactions,apache-camel,camel-sql,Spring,Spring Boot,Transactions,Apache Camel,Camel Sql,我正在使用Camel将springboot应用程序与其他域集成。 我使用SQL组件配置了一个简单的路由,用于轮询和更新数据库: from("sql:"+selectSQL+"?consumer.delay=20000&onConsume="+updateSQL) .log("---select sql done") .to("sql:" + insertSQL); SQL是这样的: String selectSQL = "SELECT * FROM T1 WHERE PRO

我正在使用Camel将springboot应用程序与其他域集成。 我使用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...)";

String selectSQL=“从T1中选择*,其中PROCESSED为null,ROWNUM,在深入研究Camel文档和源代码后,我得出结论,我所要求的是不可能实现的。因此,让我发布我的变通解决方案
这个想法是使用一个具有调度功能的组件,如计时器组件。可以启动下一个事务,在该事务中完成所有DB操作:

from("timer:pollingTimer?period=20s")
    .transacted("propagationRequired")
    .to("sql:" + selectSQL)
    .to("sql:" + updateSQL)
    .to("sql:" + insertSQL)
    .log("processing is done");
最终,可以在数据库操作之间应用一些处理器来正确处理选定的行