Apache Camelを使い始めたばかりで、2つのテーブルを同期させたいと思います。どちらのテーブルにも、「id」と「name」の2つの列があります。このシナリオでは、最初のテーブルを照会し、2番目のテーブルに各レコードが存在するかどうかを確認し、存在しない各レコードを挿入します。これが私の試みです:
<camel:camelContext id="test">
<camel:route>
<camel:from uri="timer://kickoff?period=5s"/>
<camel:to uri="sql:select id, name from table1?dataSourceRef=dataSource"/>
<camel:split>
<camel:simple>body</camel:simple>
<camel:to uri="sql:select * from table2 where id = #?dataSourceRef=dataSource" />
<camel:choice>
<camel:when>
<camel:simple>${header.CamelSqlRowCount} == 0</camel:simple>
<camel:to uri="sql:insert into table2 (id, name) values (#, #)?dataSourceRef=dataSource" />
</camel:when>
</camel:choice>
<camel:to uri="mock:result" />
</camel:split>
</camel:route>
</camel:camelContext>
ここでの問題は、に到達するまでinsert into table2
に、元のメッセージ(データを含むメッセージ)が失われることです。その間に別のクエリを実行する必要があったためです(2番目のテーブルのデータをチェックします)。私のアプローチは優れていますか?データを含むメッセージを取得するにはどうすればよいですか?