5.0 および 5.1 間の変更
新規コンポーネント
以下のコンポーネントは、5.1 の新機能です。
AmqpDedicatedChannelAdvice
厳密なメッセージ順序を参照してください。
機能サポートの改善
java.util.function
インターフェースは、フレームワークコンポーネントでの統合サポートが改善されました。また、ハンドラーメソッドとソースメソッドに Kotlin ラムダを使用できるようになりました。
java.util.function
インターフェースのサポートを参照してください。
@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()
は呼び出されなくなりました。null
Message<?>
をチェックする必要はなくなりました。以前は、メソッドが呼び出されていました。以前の動作に依存するインターセプターがある場合は、代わりに 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
属性が追加されました。
詳細については、@Publisher
アノテーションを使用したアノテーション駆動型の構成を参照してください。
ファイルの変更
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
アノテーションの使用を参照してください。