2017-12-14 5 views
0

Camelを使用して、Springブートアプリケーションを他のドメインと統合しています。 は、私は簡単なルートは、ポーリングのためのSQLコンポーネントを使用してDBの更新を設定している:Camel 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...)"; 

そして私は、これらのSQL文は、単一のポーリングのために1つのトランザクション内で実行したいと思います要求。私は.transacted("propagationPolicy")で経路を処理できることを知っていますが、fromの前に置くことはできません。

すべてのポーリングをトランザクションにすることはできますか?

PS。私は、タイマーコンポーネントと各SQLの別ルートの回避策がありますが、上記のように1つのルートのみを使用して私の問題を解決することが可能ですか?

答えて

0

Camelのドキュメントとソースコードを掘り下げた後、私が求めたことは達成できないと結論づけました。だから私は私の回避策の解決策を投稿させてください。
考え方は、タイマーコンポーネントのようなスケジューリングでコンポーネントの1つを使用することです。

最後に、選択された行を正しく処理するためにDB操作間にいくつかのプロセッサを適用することができました。

関連する問題