第44章 ElSql


ElSql コンポーネント

Camel 2.16 以降で利用可能
elsql: コンポーネントは、ElSql を使用して SQL クエリーを定義する既存の SQL コンポーネントへの拡張です。
このコンポーネントは、実際の SQL 処理のために spring-jdbc を背後で使用します。
Maven ユーザーは、このコンポーネントの以下の依存関係を pom.xml に追加する必要があります。
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-elsql</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
Copy to Clipboard Toggle word wrap
注記
このコンポーネントは、Transactional Client として使用できます。
ElSql コンポーネントは、以下のエンドポイント URI 表記を使用します。
elsql:elSqlName:resourceUri[?options]
Copy to Clipboard Toggle word wrap
以下の形式で URI にクエリーオプションを追加できます。 ?option=value&option=value&...
SQL クエリーへのパラメーターは、elsql マッピングファイルのパラメーターに名前を付け、指定の優先順位で Camel メッセージから対応するキーにマップします。
1.Camel 2.16.1: Simple 式の場合はメッセージボディーから。
2. メッセージボディーから java.util.Map
3. メッセージヘッダーから
名前付きパラメーターを解決できない場合は、例外が発生します。

オプション

Expand
オプション
デフォルト
説明
resourceUri 文字列 null 必須: 使用する elsql SQL ステートメントが含まれるリソースファイル。複数のリソースはコンマで区切って指定できます。リソースはデフォルトでクラスパスにロードされ、file: の接頭辞を指定してファイルシステムからロードすることができます。このオプションはコンポーネントで設定してから、エンドポイントで設定する必要がないことに注意してください。
elSqlConfig null 特定の設定された ElSqlConfig を使用します。代わりに databaseVendor オプションを使用することが推奨されます。
databaseVendor デフォルト ベンダー固有の ElSqlConfig を使用するには、以下を実行します。使用できる値は、デフォルト、Postgres、HSql、MySql、Oracle、SqlServer 2008、Veritca です。
batch
boolean
false
SQL バッチ更新ステートメントを実行します。true に設定されている場合は、インバウンドメッセージのボディーがどのように変化するかについての以下の注記を参照してください。
dataSource
String
null
レジストリーで検索するための DataSource への参照。
template.<xxx>
null
クエリーを実行するために背後で使用される Spring NamedParameterJdbcTemplate に追加のオプションを設定します。たとえば、template.maxRows=10 です。詳細なドキュメントは、NamedParameterJdbcTemplate javadoc のドキュメント を参照してください。
consumer.delay
long
500
各ポーリングの遅延(ミリ秒単位)。
consumer.initialDelay
long
1000
ポーリングが開始するまでの時間(ミリ秒単位)。
consumer.useFixedDelay
boolean
false
ポーリング間の固定遅延を使用するには、true に設定します。それ以外の場合は、固定レートが使用されます。詳細は、JDK の ScheduledExecutorService を参照してください。
maxMessagesPerPoll
int
0
ポーリングごとに収集するメッセージの最大数を定義する整数値。デフォルトでは最大値は設定されていません。
consumer.useIterator
boolean
true
true ポーリングが個別に処理されるときに返された各行の場合。false の場合、データ java.util.List 全体が IN ボディーとして設定されます。
consumer.routeEmptyResultSet
boolean
false
ポーリングするデータがない場合に、単一の空のエクスチェンジをルーティングするかどうか。
consumer.onConsume
String
null
各行を処理した後、このクエリーを実行できます。エクスチェンジが正常に処理された場合、たとえば、行を processed とマークします。クエリーには パラメーターを指定できます。
consumer.onConsumeFailed
String
null
各行を処理した後、このクエリーを実行できます。エクスチェンジが失敗した場合、たとえば行が失敗したとマークされます。クエリーには パラメーターを指定できます。
consumer.onConsumeBatchComplete
String
null
バッチ全体の処理後、このクエリーを実行して行を一括更新することができます。クエリーにはパラメーターを指定できません。
consumer.breakBatchOnConsumeFail
boolean
false
consumer.onConsume を使用して失敗すると、このオプションはバッチを分割するか、バッチからの次の行の処理を継続するかどうかを制御します。
outputType
String
SelectList
コンシューマーまたはプロデューサーの出力を Map of Map として SelectList にするか、以下のように単一の Java オブジェクトとして SelectOne を作成します。1)クエリーに列が 1 つしかない場合は、その JDBC Column オブジェクトが返されます。( SELECT COUNT( * ) FROM PROJECT など) Long オブジェクトが返されます。クエリーに複数の列がある場合は、その結果の Map を返します。c) outputClass が設定されている場合は、その結果の Map を返します。 次に、列名に一致するすべてのセッターを呼び出して、クエリー結果を Java Bean オブジェクトに変換します。クラスにインスタンスを作成するデフォルトのコンストラクターがあるとします。d)クエリーによって複数の行が発生した場合は、一意でない結果例外が出力されます。
また、SelectList は SelectOne として各行を Java オブジェクトにマッピングしています(ステップ c のみ)。
outputClass
String
null
outputType=SelectOne の場合に変換として使用する完全なパッケージおよびクラス名を指定します。
outputHeader
String null
メッセージボディーではなくヘッダーとして結果を保存するには、以下を行います。これにより、既存のメッセージボディーをそのまま保存できます。
noop
boolean
false
これが設定されている場合、は SQL クエリーの結果を無視し、処理を継続するために OUT メッセージとして既存の IN メッセージを使用します。
transacted boolean false Camel 2.16.2: SQL コンシューマーのみ:トランザクションを有効または無効にします。有効にすると、エクスチェンジの処理が失敗した場合、コンシューマーは追加のエクスチェンジを処理しなくなり、ロールバックの Eager が発生します。

クエリーの結果

select 操作の場合、結果は JdbcTemplate.queryForList ()メソッドによって返される List<Map<String, Object>> タイプのインスタンスになります。update 操作では、結果は更新行数で、Integer として返されます。
デフォルトでは、結果はメッセージのボディーに配置されます。outputHeader パラメーターが設定されている場合、結果はヘッダーに配置されます。これは、完全な Message Enrichment パターンを使用してヘッダーを追加する代わりに、シーケンスやその他の小さい値をヘッダーにクエリーするための簡潔な構文を提供します。outputHeader と outputType を一緒に使用すると便利です。

ヘッダーの値

update 操作の実行時に、SQL コンポーネントは以下のメッセージヘッダーに更新数を保存します。
Expand
ヘッダー
説明
CamelSqlUpdateCount
Integer オブジェクトとして返される update 操作で更新される行数。
CamelSqlRowCount
Integer オブジェクトとして返される select 操作に対して返される行数。

以下のルートでは、Projects テーブルからすべてのプロジェクトを取得します。SQL クエリーには、:#lic と :#min の 2 つの名前付きパラメーターがあることに注意してください。
その後、Camel はメッセージボディーまたはメッセージヘッダーからこれらのパラメーターを検索します。上記の例では、名前付きパラメーターに定数値で 2 つのヘッダーを設定することに注意してください。
   from("direct:projects")
     .setHeader("lic", constant("ASF"))
     .setHeader("min", constant(123))
     .to("elsql:projects:com/foo/orders.elsql")
Copy to Clipboard Toggle word wrap
および elsql マッピングファイル
@NAME(projects)
  SELECT *
  FROM projects
  WHERE license = :lic AND id > :min
  ORDER BY id
Copy to Clipboard Toggle word wrap
メッセージボディーが java.util.Map の場合、名前付きパラメーターはボディーから取得されます。
   from("direct:projects")
     .to("elsql:projects:com/foo/orders.elsql")
Copy to Clipboard Toggle word wrap
Camel 2.16.1 以降では、Simple 式も使用できます。これにより、メッセージボディーの表記のような OGNL を使用できます。ここでは、getLicense および getMinimum メソッドがあることを前提としています。
@NAME(projects)
  SELECT *
  FROM projects
  WHERE license = :${body.license} AND id > :${body.minimum}
  ORDER BY id
Copy to Clipboard Toggle word wrap

その他の参考資料

  • SQL Component
  • MyBatis
  • JDBC
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat