このバージョンはまだ開発中であり、まだ安定しているとは見なされていません。最新の安定バージョンについては、Spring Integration 6.4.3 を使用してください!

送信ゲートウェイ

送信ゲートウェイは、送信アダプターと受信アダプターの組み合わせに似ています。そのロールは、メッセージを処理し、それを使用して SQL クエリを実行し、応答チャネルに送信することで結果で応答することです。デフォルトでは、次の例に示すように、メッセージペイロードとヘッダーはクエリへの入力パラメーターとして使用できます。

<int-jdbc:outbound-gateway
    update="insert into mythings (id, status, name) values (:headers[id], 0, :payload[thing])"
    request-channel="input" reply-channel="output" data-source="dataSource" />

上記の例の結果は、mythings テーブルにレコードを挿入し、影響を受けた行の数を示すメッセージ(ペイロードはマップ: {UPDATED=1})を出力チャネルに返すことです。

更新クエリが自動生成キーの挿入である場合、keys-generated="true" を前述の例に追加することにより、生成されたキーを応答メッセージに追加できます(一部のデータベースプラットフォームではサポートされていないため、これはデフォルトではありません)。次の例は、変更された構成を示しています。

<int-jdbc:outbound-gateway
    update="insert into mythings (status, name) values (0, :payload[thing])"
    request-channel="input" reply-channel="output" data-source="dataSource"
    keys-generated="true"/>

次の例に示すように、更新カウントまたは生成されたキーの代わりに、選択クエリを提供して、結果(受信アダプターなど)から応答メッセージを実行および生成することもできます。

<int-jdbc:outbound-gateway
    update="insert into foos (id, status, name) values (:headers[id], 0, :payload[foo])"
    query="select * from foos where id=:headers[$id]"
    request-channel="input" reply-channel="output" data-source="dataSource"/>

Spring Integration 2.2 以降、更新 SQL クエリは必須ではなくなりました。query 属性または query 要素を使用して、選択クエリのみを提供できるようになりました。これは、一般的なゲートウェイやペイロードエンリッチャーなどを使用してデータをアクティブに取得する必要がある場合に非常に役立ちます。次に、結果から応答メッセージが生成され(受信アダプターの動作と同様)、応答チャネルに渡されます。次の例は、query 属性を使用する方法を示しています。

<int-jdbc:outbound-gateway
    query="select * from foos where id=:headers[id]"
    request-channel="input"
    reply-channel="output"
    data-source="dataSource"/>

デフォルトでは、SELECT クエリのコンポーネントは、カーソルから 1(最初の)行のみを返します。この動作は、max-rows オプションを使用して調整できます。SELECT からすべての行を返す必要がある場合は、max-rows="0" の指定を検討してください。

チャネルアダプターと同様に、リクエストおよび応答用に SqlParameterSourceFactory インスタンスを提供することもできます。デフォルトは送信アダプターの場合と同じであるため、リクエストメッセージは式のルートとして使用できます。keys-generated="true" の場合、式のルートは生成されたキーです(1 つしかない場合はマップ、複数値の場合はマップのリスト)。

送信ゲートウェイには、DataSource または JdbcTemplate への参照が必要です。また、受信メッセージのクエリへのバインドを制御するために、SqlParameterSourceFactory を挿入することもできます。

バージョン 4.2 以降、request-prepared-statement-setter 属性は request-sql-parameter-source-factory の代替として <int-jdbc:outbound-gateway> で使用可能です。MessagePreparedStatementSetter Bean 参照を指定できます。これにより、実行前に、より洗練された PreparedStatement 準備が実装されます。

バージョン 6.0 以降、JdbcOutboundGateway は、以前のように「応答なし」を意味する null に変換する代わりに、空のリストの結果をそのまま返します。これにより、空のリストの処理がダウンストリームロジックの一部であるアプリケーションで余分な構成が発生しました。空リスト処理オプションについては、スプリッタ廃棄チャネルを参照してください。

MessagePreparedStatementSetter の詳細については、送信チャネルアダプターを参照してください。