Fuse 6 is no longer supported
As of February 2025, Red Hat Fuse 6 is no longer supported. If you are using Fuse 6, please upgrade to Red Hat build of Apache Camel.第44章 ElSql
ElSql コンポーネント リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel 2.16 以降で利用可能
elsql: コンポーネントは、ElSql を使用して SQL クエリーを定義する既存の SQL コンポーネントへの拡張です。
このコンポーネントは、実際の SQL 処理のために
spring-jdbc
を背後で使用します。
Maven ユーザーは、このコンポーネントの以下の依存関係を
pom.xml
に追加する必要があります。
注記
このコンポーネントは、Transactional Client として使用できます。
ElSql コンポーネントは、以下のエンドポイント URI 表記を使用します。
elsql:elSqlName:resourceUri[?options]
elsql:elSqlName:resourceUri[?options]
以下の形式で URI にクエリーオプションを追加できます。
?option=value&option=value&...
SQL クエリーへのパラメーターは、elsql マッピングファイルのパラメーターに名前を付け、指定の優先順位で Camel メッセージから対応するキーにマップします。
1.Camel 2.16.1: Simple 式の場合はメッセージボディーから。
2. メッセージボディーから
java.util.Map
3. メッセージヘッダーから
名前付きパラメーターを解決できない場合は、例外が発生します。
オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
オプション
|
型
|
デフォルト
|
説明
|
---|---|---|---|
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 コンポーネントは以下のメッセージヘッダーに更新数を保存します。
ヘッダー
|
説明
|
---|---|
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")
from("direct:projects")
.setHeader("lic", constant("ASF"))
.setHeader("min", constant(123))
.to("elsql:projects:com/foo/orders.elsql")
および elsql マッピングファイル
@NAME(projects) SELECT * FROM projects WHERE license = :lic AND id > :min ORDER BY id
@NAME(projects)
SELECT *
FROM projects
WHERE license = :lic AND id > :min
ORDER BY id
メッセージボディーが
java.util.Map
の場合、名前付きパラメーターはボディーから取得されます。
from("direct:projects") .to("elsql:projects:com/foo/orders.elsql")
from("direct:projects")
.to("elsql:projects:com/foo/orders.elsql")
Camel 2.16.1 以降では、Simple 式も使用できます。これにより、メッセージボディーの表記のような OGNL を使用できます。ここでは、
getLicense
および getMinimum
メソッドがあることを前提としています。
@NAME(projects) SELECT * FROM projects WHERE license = :${body.license} AND id > :${body.minimum} ORDER BY id
@NAME(projects)
SELECT *
FROM projects
WHERE license = :${body.license} AND id > :${body.minimum}
ORDER BY id
その他の参考資料 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
- SQL Component
- MyBatis
- JDBC