7

ルートの条件の1つとして、exchange.bodyをデータベーステーブルに挿入したいと思います。

  • メッセージ本文を挿入するためのcamel-jdbcコンポーネントの例/チュートリアルはありますか?
  • SQLステートメント自体をインポートしてexchange.bodyを渡すことはできますか?

http://camel.apache.org/jdbc.htmlの例を見ましたが、理解できませんでした。

ここで春の例は私にとって混乱しています。本文をSQLクエリとして設定し、クラスパスからクエリを再度インポートする理由がわかりませんでした。(ここに記載されている挿入クエリの例はありません。)

4

2 に答える 2

7

同じステートメントを使用して挿入する場合(パラメーターのみを変更する場合)-SQLコンポーネントを使用します。

任意のSQLステートメントを使用してコンポーネントに挿入する場合は、 JDBCコンポーネントを使用します。

SQLコンポーネントの使用法:

from("direct:start").to("sql:insert into table foo (c1, c1) values ('#','#')");

com.google.common.collect.Lists;
producerTemplate.sendBody("direct:start", Lists.newArrayList("value1","value2"));

JDBCコンポーネントの使用法:

from("direct:start").to("jdbc:dataSource");

producerTemplate.sendBody("direct:start", "insert into table foo (c1, c1) values ('value1','value2')");
于 2012-05-30T10:33:36.467 に答える
5

とにかくそれを挿入する前に、おそらくペイロードの再構築を行う必要があるので、Camelの任意のメソッドを使用して変換を実行し、本体を適切なINSERTステートメントに設定することに問題はないはずです。

重要なのは、着信メッセージがどのようなペイロード構造を持っているかです。基本的な場合-それは文字列です-それはかなり単純でなければなりません

// In a Java bean/processor before the JDBC endpoint.
// Update: make sure to sanitize the payload from SQL injections if it contains user inputs or external data not generated by trusted sources.
exchange.getIn().setBody("INSERT INTO MYTABLE VALUES('" + exchange.getIn().getBody(String.class) + "', 'fixedValue', 1.0, 42)");

メッセージに複雑なデータ構造が含まれている場合、このコードはもちろんより複雑になりますが、通常のアプリケーションがSQLクエリを生成するのとほぼ同じ方法です。

参照しているクラスパスの例

 <jdbc:embedded-database id="testdb" type="DERBY">
        <jdbc:script location="classpath:sql/init.sql"/>
 </jdbc:embedded-database>

組み込みのデータベースサーバー(Apache Derby)を起動し、初期データ(sql / init.sqlファイル)を入力して、JDBCコンポーネントをテストする方法を簡単に示します。この部分は、実際にはコアjdbcコンポーネントの一部ではありませんが、DBサーバーを構成したり、JDBC接続プロパティを設定したりせずにサンプルを起動して実行するためのドキュメントに含まれています。

そうは言っても、より複雑なシナリオではSQLコンポーネントを使用することをお勧めします。

于 2012-05-28T21:57:42.800 に答える