5.0 および 5.1 間の変更

新規コンポーネント

以下のコンポーネントは、5.1 の新機能です。

AmqpDedicatedChannelAdvice

厳密なメッセージ順序を参照してください。

機能サポートの改善

java.util.function インターフェースでは、フレームワークコンポーネントの統合サポートが改善されました。また、Kotlin ラムダをハンドラーおよびソースメソッドに使用できるようになりました。

@LongRunningTest

JUnit 5 @LongRunningTest 条件付きアノテーションが提供され、RUN_LONG_INTEGRATION_TESTS エントリの環境またはシステムプロパティを true の値でチェックして、テストを実行するかスキップするかを決定します。

JUnit のルールと条件を参照してください。

一般的な変更

バージョン 5.1 では、次の変更が行われました。

Java DSL

IntegrationFlowContext はインターフェースになり、IntegrationFlowRegistration は IntegrationFlowContext の内部インターフェースになりました。

リクエスト / リプライ構成のフローの最後にログを記録したい場合に便利なように、新しい logAndReply() 演算子が導入されました。これにより、一方通行のエンドフローコンポーネントとして扱われる log() との混乱が回避されます。

統合フロー内の NamedComponent に対して生成された Bean 名は、視覚ツール、ログアナライザー、メトリクスコレクターから読みやすくするために、コンポーネント型に基づいています。

GenericHandler.handle() は、2 番目の引数の MessageHeaders 型を除きます。

ディスパッチャーの例外

AbstractDispatcher がキャッチして再スローした例外の一貫性が向上しました。

  • failedMessage プロパティを持つあらゆる種類の MessagingException は、変更されずに再スローされます。

  • 他のすべての例外は、failedMessage プロパティが設定された MessageDeliveryException にラップされます。

以前:

  • failedMessage プロパティを持つあらゆる種類の MessagingException が変更されずに再スローされた

  • failedMessage プロパティを持たない MessagingException は、failedMessage プロパティが設定された MessagingException にラップされました。

  • 他の RuntimeException インスタンスは変更されずに再スローされました。

  • チェックされた例外は、failedMessage プロパティが設定された MessageDeliveryException にラップされました。

グローバルチャネルインターセプター

グローバルチャネルインターセプターは、Java DSL または beanFactory.initializeBean() を使用して初期化された Bean を使用する場合、IntegrationFlowContext を介するなど、動的に登録されたチャネルに適用されるようになりました。以前は、アプリケーションコンテキストがリフレッシュされた後に Bean が作成された場合、インターセプターは適用されませんでした。

チャネルインターセプター

メッセージが受信されない場合、ChannelInterceptor.postReceive() は呼び出されなくなりました。nullMessage<?> をチェックする必要はなくなりました。以前は、メソッドが呼び出されていました。以前の動作に依存するインターセプターがある場合は、代わりに afterReceiveCompleted() を実装してください。これは、メッセージが受信されたかどうかに関係なく、そのメソッドが呼び出されるためです。さらに、PolledAmqpChannel および PolledJmsChannel は、以前は null で afterReceiveCompleted() を呼び出しませんでした。彼らは今そうします。

ObjectToJsonTransformer

ObjectToJsonTransformer に新しい ResultType.BYTES モードが導入されました。

詳細については、JSONTransformers を参照してください。

統合フロー: 生成された Bean 名

バージョン 5.0.5 から、IntegrationFlow のコンポーネント用に生成された Bean 名には、接頭部としてフロー Bean 名とそれに続くドットが含まれます。例: フロー Bean の名前が flowBean の場合、生成された Bean の名前は flowBean.generatedBean になります。

詳細については、メッセージフローの操作を参照してください。

アグリゲーターの変更

groupTimeout が負の値に評価される場合、アグリゲーターはすぐにグループを期限切れにします。null のみが、現在のメッセージに対して何もしない信号と見なされます。

(デフォルトで)出力メッセージの MessageBuilder.popSequenceDetails() を呼び出すことができる新しい popSequence プロパティが導入されました。また、AbstractAggregatingMessageGroupProcessor は、最適化のために Message 全体ではなく AbstractIntegrationMessageBuilder を返すようになりました。

詳細については、アグリゲーターを参照してください。

@Publisher アノテーションの変更

バージョン 5.1 から、@EnablePublisher を使用するか、<int:annotation-config> の <int:enable-publisher> 子要素を使用して、@Publisher AOP 機能を明示的にオンにする必要があります。また、ProxyFactory 構成を調整するために、proxy-target-class および order 属性が追加されました。

ファイルの変更

FileExistsMode.APPEND または FileExistsMode.APPEND_NO_FLUSH を使用している場合は、新しいファイルを作成するときに呼び出される newFileCallback を提供できます。このコールバックは、新しく作成されたファイルと、コールバックをトリガーしたメッセージを受け取ります。たとえば、これを使用して CSV ヘッダーを書き込むことができます。

FileReadingMessageSource は、start() が呼び出されるまでディレクトリをチェックおよび作成しません。FileReadingMessageSource の受信チャネルアダプターに autoStartup = false がある場合、アプリケーションの起動中にファイルシステムに対する障害は発生しません。

詳細については、ファイルサポートを参照してください。

AMQP の変更

DefaultAmqpHeaderMapper で ID および Timestamp ヘッダーマッピングを変更しました。詳細については、AMQP メッセージヘッダーの下部にある注を参照してください。

contentType ヘッダーは、一般ヘッダーマップのエントリとして正しくマップされるようになりました。詳細については、contentType ヘッダーを参照してください。

バージョン 5.1.3 以降、手動確認応答の使用時にメッセージ変換例外が発生し、エラーチャネルが定義されている場合、ペイロードは channel および deliveryTag プロパティが追加された ManualAckListenerExecutionFailedException です。これにより、エラーフローで元のメッセージを確認 / 拒否できます。詳細については、受信メッセージの変換を参照してください。

JDBC の変更

JDBC Inbound Channel Adapter および JDBC Outbound Gateway の紛らわしい max-rows-per-poll プロパティは、新しく導入された max-rows プロパティを推奨して廃止されました。

JdbcMessageHandler は、リクエストメッセージのペイロードが Iterable 型のインスタンスである場合、batchUpdate 機能をサポートするようになりました。

INT_CHANNEL_MESSAGE テーブルのインデックス(JdbcChannelMessageStore の)は最適化されています。このようなストアに大きなメッセージグループがある場合は、インデックスを変更できます。

詳細については、JDBC サポートを参照してください。

FTP および SFTP の変更

RotatingServerAdvice が利用可能になり、受信チャネルアダプターを使用して複数のサーバーとディレクトリをポーリングできます。詳細については、受信チャネルアダプター: 複数のサーバーとディレクトリのポーリングおよび受信チャネルアダプター: 複数のサーバーとディレクトリのポーリングを参照してください。

また、受信アダプター localFilenameExpression インスタンスには、ポーリングされるリモートディレクトリを含む #remoteDirectory 変数を含めることができます。コンパレーターの汎用型(ストリーミングアダプター用に取得されたファイルリストのソートに使用)が Comparator<AbstractFileInfo<F>> から Comparator<F> に変更されました。詳細については、FTP ストリーミング受信チャネルアダプターおよび SFTP ストリーミング受信チャネルアダプターを参照してください。

さらに、受信チャネルアダプターのシンクロナイザに Comparator を提供できるようになりました。これは、maxFetchSize を使用して取得するファイルを制限する場合に役立ちます。

CachingSessionFactory には新しいプロパティ testSession があり、true の場合、キャッシュから既存のセッションをチェックアウトするときに、ファクトリが Session で test() 操作を実行します。

詳細については、SFTP セッションキャッシングおよび FTP セッションキャッシングを参照してください。

送信ゲートウェイ MPUT コマンドは、ファイルまたは文字列のコレクションを持つメッセージペイロードをサポートするようになりました。詳細については、SFTP 送信ゲートウェイおよび FTP 送信ゲートウェイを参照してください。

TCP サポート

SSL を使用する場合、信頼できる証明書を使用した中間者攻撃を防ぐために、デフォルトでホスト検証が有効になりました。詳細については、ホスト検証を参照してください。

さらに、DefaultTcpSSLContextSupport でキーとトラストストアの型を構成できるようになりました。

Twitter サポート

Spring Social プロジェクトがサポート終了 (英語) に移行したため、Spring Integration の Twitter サポートは Extensions プロジェクトに移行しました。詳細については、Spring Integration ソーシャル Twitter [GitHub] (英語) を参照してください。

JMS サポート

JmsSendingMessageHandler は、実行時に送信する JMS メッセージのそれぞれの QoS オプションを決定する deliveryModeExpression および timeToLiveExpression オプションを提供するようになりました。DefaultJmsHeaderMapper では、true および setMapInboundDeliveryMode() および setMapInboundExpiration() の各オプションに設定することにより、受信 JMSDeliveryMode および JMSExpiration プロパティをマップできるようになりました。JmsMessageDrivenEndpoint または JmsInboundGateway が停止すると、関連するリスナーコンテナーがシャットダウンされます。これにより、共有接続とすべてのコンシューマーが閉じられます。以前の動作に戻すようにエンドポイントを構成できます。

詳細については、JMS サポートを参照してください。

HTTP/WebFlux サポート

statusCodeExpression (および Function)には、評価コンテキストのルートオブジェクトとして RequestEntity<?> が提供されるようになりました。そのため、リクエストヘッダー、メソッド、URI、本文をターゲットステータスコードの計算に使用できます。

詳細については、HTTP サポートおよび WebFlux サポートを参照してください。

JMX の変更

オブジェクト名のキー値に、Java 識別子(またはピリオド .)で許可されている文字以外の文字が含まれている場合、引用符で囲まれるようになりました。たとえば、org.springframework.integration:type=MessageChannel,name="input:foo.myGroup.errors" です。これには、以前は「許可されていた」名前とそのような文字が引用されるという副作用があります。たとえば、org.springframework.integration:type=MessageChannel,name="input#foo.myGroup.errors" です。

Micrometer サポートの変更

フレームワークによって作成された標準 Micrometer メーターのカスタマイズがより簡単になりました。詳細については、Micrometer 統合を参照してください。

統合グラフのカスタマイズ

IntegrationGraphServer の Function<NamedComponent, Map<String, Object>> additionalPropertiesCallback を介して IntegrationNode に追加のプロパティを追加することが可能になりました。詳細については、統合グラフを参照してください。

統合グローバルプロパティ

DEBUG ロジックレベルが org.springframework.integration カテゴリに対してオンになっている場合、統合グローバルプロパティ(デフォルトを含む)をログに出力できるようになりました。詳細については、グローバルプロパティを参照してください。

@Poller 用の receiveTimeout 

@Poller アノテーションは、便宜上、receiveTimeout オプションを提供するようになりました。詳細については、@Poller アノテーションの使用を参照してください。