クラス JsonChannelMessageStorePreparedStatementSetter

java.lang.ObjectSE
org.springframework.integration.jdbc.store.channel.ChannelMessageStorePreparedStatementSetter
org.springframework.integration.jdbc.store.channel.JsonChannelMessageStorePreparedStatementSetter

public class JsonChannelMessageStorePreparedStatementSetter extends ChannelMessageStorePreparedStatementSetter
Message オブジェクトに Java 直列化ではなく JSON 直列化を使用する ChannelMessageStorePreparedStatementSetter 実装。

デフォルトでは、この実装はメッセージ全体 (ヘッダーとペイロードを含む) を JSON として保存し、適切な逆直列化のために Jackson の @class プロパティを使用して型情報が埋め込まれます。

重要 : JSON 直列化は、メッセージコンテンツをテキスト形式でデータベースに公開します。機密データには適切なデータベースアクセス制御と暗号化を適用してください。機密情報を扱う本番環境で JSON 直列化を使用する場合は、セキュリティへの影響を考慮してください。

データベース要件 : この実装では、MESSAGE_CONTENT 列をテキストベースの型に変更する必要があります。

  • PostgreSQL: BYTEA から JSONB への変更
  • MySQL: BLOB から JSON への変更
  • H2: LONGVARBINARY から CLOB への変更
スキーマ移行の手順については、リファレンスドキュメントを参照してください。

使用例:

@Bean
JdbcChannelMessageStore messageStore(DataSource dataSource) {
    JdbcChannelMessageStore store = new JdbcChannelMessageStore(dataSource);
    store.setChannelMessageStoreQueryProvider(new PostgresChannelMessageStoreQueryProvider());

    // Enable JSON serialization (requires schema modification)
    store.setPreparedStatementSetter(
        new JsonChannelMessageStorePreparedStatementSetter());
    store.setMessageRowMapper(
        new JsonMessageRowMapper("com.example"));

    return store;
}
導入:
7.0
作成者:
Yoobin Yoon, Artem Bilan
  • コンストラクターの詳細

    • JsonChannelMessageStorePreparedStatementSetter

      public JsonChannelMessageStorePreparedStatementSetter()
      Spring Integration メッセージの直列化用に構成されたデフォルトの JsonObjectMapper を使用して、新しい JsonChannelMessageStorePreparedStatementSetter を作成します。

      このコンストラクターは、標準の Spring Integration クラスおよび Java クラスを直列化する場合に適しています。カスタムペイロード型の場合は、対応する JsonMessageRowMapper にパッケージを追加する必要があります。

    • JsonChannelMessageStorePreparedStatementSetter

      public JsonChannelMessageStorePreparedStatementSetter(JsonObjectMapper<?,?> jsonObjectMapper)
      カスタム JsonObjectMapper を使用して新しい JsonChannelMessageStorePreparedStatementSetter を作成します。

      このコンストラクターを使用すると、JSON 直列化構成を完全に制御できます。

      注意 : 一貫した直列化とデ直列化を実現するには、対応する JsonMessageRowMapper でも同じ JsonObjectMapper 構成を使用する必要があります。

      パラメーター:
      jsonObjectMapper - JSON 直列化に使用する JsonObjectMapper
  • 方法の詳細

    • setValues

      public void setValues(PreparedStatementSE preparedStatement, Message<?> requestMessage, ObjectSE groupId, StringSE region, boolean priorityEnabled) throws SQLExceptionSE
      クラスからコピーされた説明: ChannelMessageStorePreparedStatementSetter
      指定された引数に従って preparedStatement パラメーターの入力を実行します。デフォルトの機能は (パラメーター - データ) です。
      • 1 - messageId
      • 2 - groupKey
      • 3 - 領域
      • 4 - createdDate
      • 5 - 有効な場合は優先度、それ以外の場合は null
      • 6 - ChannelMessageStorePreparedStatementSetter.serializer が指定されている場合は直列化されたメッセージ。
      継承は、母集団の共通プロパティに対してこのメソッドを呼び出し、パラメーター #6 に対してカスタムメッセージ直列化ロジックを実行することを検討できます。このメソッドを完全にオーバーライドすることで、任意のカスタムデータ構造の作成を実現できます。
      オーバーライド:
      クラス ChannelMessageStorePreparedStatementSettersetValues 
      パラメーター:
      preparedStatement - 提供された引数に基づいて列にデータを入力する PreparedStatementSE
      requestMessage - 保存する Message
      groupId - 保存するメッセージのグループ ID
      region - 異なるデータベースクライアントを区別するためのターゲットテーブル内の領域
      priorityEnabled - 優先度を保存する必要があるかどうかを示すフラグ
      例外:
      SQLExceptionSE - データ入力中に例外がスローされます