4.3 および 5.0 間の変更

アプリケーションに影響する可能性のある重要な変更については、移行ガイド [GitHub] (英語) を参照してください。wiki [GitHub] (英語) で 2.1 に戻るすべてのバージョンの移行ガイドを見つけることができます。

新規コンポーネント

バージョン 5.0 は、多くの新しいコンポーネントを追加しました。

Java DSL

別の Spring Integration Java DSL [GitHub] (英語) プロジェクトがコア Spring Integration プロジェクトにマージされました。チャネルアダプターとゲートウェイの IntegrationComponentSpec 実装は、特定のモジュールに配布されます。Java DSL サポートの詳細については、Java DSL を参照してください。Spring Integration 5.0 への移行 [GitHub] (英語) に必要な手順については、4.3 から 5.0 への移行ガイド [GitHub] (英語) も参照してください。

テストサポート

Spring Integration アプリケーションのテストに役立つ新しい Spring Integration テストフレームワークを作成しました。テストクラスの @SpringIntegrationTest アノテーションと MockIntegration ファクトリにより、統合フローの JUnit テストを多少簡単にできるようになりました。

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

MongoDB 送信ゲートウェイ

新しい MongoDbOutboundGateway では、リクエストチャネルにメッセージを送信することにより、データベースにオンデマンドでクエリを実行できます。

詳細については、MongoDB 送信ゲートウェイを参照してください。

WebFlux ゲートウェイおよびチャネルアダプター

Spring WebFlux フレームワークゲートウェイおよびチャネルアダプター用の新しい WebFlux サポートモジュールを導入しました。

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

コンテンツ型の変換

サービスメソッド呼び出しに新しい InvocableHandlerMethod ベースのインフラストラクチャを使用したため、ペイロードからターゲットメソッド引数への contentType 変換を実行できます。

詳細については、コンテンツ型の変換を参照してください。

ErrorMessagePublisher および ErrorMessageStrategy

ErrorMessage インスタンスを作成するために ErrorMessagePublisher と ErrorMessageStrategy を追加しました。

詳細については、エラー処理を参照してください。

JDBC メタデータストア

MetadataStore 実装の JDBC 実装を追加しました。これは、メタデータのトランザクション境界を確保する必要がある場合に役立ちます。

詳細については、JDBC メタデータストアを参照してください。

一般的な変更

Spring Integration は、Spring Framework 5.0 および Project Reactor 3.1 に完全に基づいています。以前のプロジェクト Reactor バージョンはサポートされなくなりました。

コアの変更

@Poller アノテーションには、基になる MessagePublishingErrorHandler の構成を容易にするための errorChannel 属性が含まれています。詳細については、アノテーションサポートを参照してください。

すべてのリクエスト / 応答エンドポイント(AbstractReplyProducingMessageHandler に基づく)がトランザクションを開始できるようになったため、ダウンストリームフロー全体がトランザクション対応になりました。詳細については、トランザクションサポートを参照してください。

SmartLifecycleRoleController は、ロール内のエンドポイントのステータスを取得するメソッドを提供するようになりました。詳細については、エンドポイントのロールを参照してください。

デフォルトでは、POJO メソッドは InvocableHandlerMethod を使用して呼び出されるようになりましたが、以前のように SpEL を使用するように設定できます。詳細については、POJO メソッドの呼び出しを参照してください。

POJO メソッドをメッセージハンドラーとしてターゲットにする場合、サービスメソッドの 1 つを @Default アノテーションでマークして、一致しない条件にフォールバックメカニズムを提供できるようになりました。詳細については、Service Activator の構成を参照してください。

ポーリングされたメッセージを常に現在のトランザクションコンテキストに保存するために、簡単な PassThroughTransactionSynchronizationFactory を追加しました。このメッセージは、MessagingException の failedMessage プロパティとして使用され、トランザクションの完了中にスローされた生の例外をラップします。詳細については、トランザクションの同期を参照してください。

アグリゲーター式ベースの ReleaseStrategy は、Message<?> のコレクションだけでなく、MessageGroup に対して式を評価するようになりました。詳細については、アグリゲーターと Spring 式言語 (SpEL) を参照してください。

これで、ObjectToMapTransformer にカスタマイズされた JsonObjectMapper を提供できます。

詳細については、アグリゲーターと Spring 式言語 (SpEL) を参照してください。

@GlobalChannelInterceptor アノテーションと <int:channel-interceptor> は、コンポーネント名のマッチングのために負のパターン(! を先頭に付加する)をサポートするようになりました。詳細については、グローバルチャネルインターセプターの構成を参照してください。

候補がロックの取得に失敗した場合、LockRegistryLeaderInitiator は DefaultLeaderEventPublisher を介して新しい OnFailedToAcquireMutexEvent を発行します。詳細については、Leadership Event Handling を参照してください。

ゲートウェイの変更

ゲートウェイメソッドに void 戻り型があり、エラーチャネルが提供される場合、ゲートウェイは errorChannel ヘッダーを正しく設定するようになりました。以前は、ヘッダーは読み込まれていませんでした。これにより、同期ダウンストリームフロー(呼び出しスレッドで実行)が構成済みチャネルに例外を送信しますが、非同期ダウンストリームフローの例外は代わりにデフォルト errorChannel に送信されます。

RequestReplyExchanger インターフェースには、提案されたメッセージ交換契約を満たすために throws MessagingException 節があります。

SpEL 式を使用して、リクエストと応答のタイムアウトを指定できるようになりました。詳細については、メッセージングゲートウェイを参照してください。

アグリゲーターのパフォーマンスの変更

デフォルトでは、アグリゲーターは SimpleSequenceSizeReleaseStrategy を使用するようになりました。これは、特に大規模なグループではより効率的です。empty-group-min-timeout の後、空のグループが削除されるようになりました。詳細については、アグリゲーターを参照してください。

スプリッターの変更

スプリッターコンポーネントは、Java Stream および Reactive Streams Publisher オブジェクトを処理および分割できるようになりました。出力チャネルが ReactiveStreamsSubscribableChannel の場合、AbstractMessageSplitter は、分割されるオブジェクトに関係なく、通常の Iterator の代わりに、後続の反復のために Flux を構築します。さらに、AbstractMessageSplitter は、可能であれば Iterable および Iterator オブジェクトのサイズを判別できる protected obtainSizeIfPossible() メソッドを提供します。詳細については、スプリッターを参照してください。

JMS の変更

以前は、Spring Integration JMS XML 構成は JMS 接続ファクトリに connectionFactory のデフォルト Bean 名を使用していたため、コンポーネント定義からプロパティを省略できました。名前を jmsConnectionFactory に変更しました。これは、JMS 接続ファクトリ Bean を自動構成するために Spring Boot が使用する Bean 名です。

アプリケーションが以前の動作に依存している場合、connectionFactory Bean の名前を jmsConnectionFactory に変更するか、現在の名前を使用して Bean を使用するようにコンポーネントを明確に構成できます。詳細については、JMS サポートを参照してください。

メールの変更

IMAP メールコンテンツのレンダリングに関するいくつかの不一致が解決されました。詳細については、「メール受信チャネルアダプター」セクションの注を参照してください。

フィードの変更

ROME で非推奨となった com.rometools.fetcher.FeedFetcher の代わりに、FeedEntryMessageSource に新しい Resource プロパティを導入しました。詳細については、フィードアダプターを参照してください。

ファイルの変更

FileReadingMessageSource の相対パスを表す新しい FileHeaders.RELATIVE_PATH メッセージヘッダーを導入しました。

テールアダプターは、idleEventInterval をサポートし、その期間中にファイルにデータがない場合にイベントを発行するようになりました。

FileWritingMessageHandler のフラッシュ述語には、追加のパラメーターが追加されました。

ファイル送信チャネルアダプターとゲートウェイ(FileWritingMessageHandler)が REPLACE_IF_MODIFIEDFileExistsMode をサポートするようになりました。

また、新しく書き込まれたファイルに対するファイル許可の設定もサポートするようになりました。

新しい FileSystemMarkerFilePresentFileListFilter が利用可能になりました。詳細については、不完全なデータの処理を参照してください。

FileSplitter は、コンテンツの最初の行を残りの行に送信されるメッセージのヘッダーとして運ぶための firstLineAsHeader オプションを提供するようになりました。

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

FTP および SFTP の変更

現在、受信チャネルアダプターには max-fetch-size というプロパティがあります。これは、ローカルディレクトリにファイルが現在ない場合に、ポーリング中にフェッチされるファイルの数を制限するために使用されます。デフォルトでは、local-filter の FileSystemPersistentAcceptOnceFileListFilter で構成されます。

また、新しく導入された scanner 属性を設定することにより、受信チャネルアダプターにカスタム DirectoryScanner 実装を提供できます。

常にディレクトリを渡すように正規表現とパターンフィルターを構成できるようになりました。これは、送信ゲートウェイで再帰を使用する場合に役立ちます。

デフォルトでは、すべての受信チャネルアダプター(ストリーミングおよび同期ベース)は適切な AbstractPersistentAcceptOnceFileListFilter 実装を使用して、リモートファイルの重複ダウンロードを防止します。

FTP および SFTP 送信ゲートウェイは、リモートファイルをフェッチするときに REPLACE_IF_MODIFIEDFileExistsMode をサポートするようになりました。

FTP および SFTP ストリーミング受信チャネルアダプターは、リモートファイル情報をメッセージヘッダーに追加するようになりました。

FTP および SFTP 送信チャネルアダプター(および送信ゲートウェイ用の PUT コマンド)は、InputStream を payload としてもサポートするようになりました。

受信チャネルアダプターは、新しく導入された RecursiveDirectoryScanner を使用して、ローカルでファイルツリーを構築できるようになりました。注入については、FTP 受信チャネルアダプターセクションの scanner オプションを参照してください。また、代わりにこれらのアダプターを WatchService に切り替えることができます。

NLST コマンドを AbstractRemoteFileOutboundGateway に追加して、ファイル名リストリモートコマンドを実行しました。

FtpOutboundGateway に workingDirExpression を提供して、現在のリクエストメッセージの FTP クライアント作業ディレクトリを変更できるようになりました。

現在、RemoteFileTemplate には invoke(OperationsCallback<F, T> action) が提供されており、同じスレッド境界の Session のスコープ内で複数の RemoteFileOperations 呼び出しを実行します。

不完全なリモートファイルを検出するための新しいフィルターを追加しました。

FtpOutboundGateway および SftpOutboundGateway は、GET または MGET コマンドを使用して正常に転送された後にリモートファイルを削除するオプションをサポートするようになりました。

詳細については、FTP/FTPS アダプターおよび SFTP アダプターを参照してください。

統合プロパティ

バージョン 4.3.2 では、新しい spring.integration.readOnly.headers グローバルプロパティが追加され、MessageBuilder によって新しく作成された Message にコピーしないヘッダーのリストをカスタマイズできるようになりました。詳細については、グローバルプロパティを参照してください。

ストリームの変更

CharacterStreamReadingMessageSource に新しいオプションを追加して、stdin を「パイプ」し、パイプが閉じられたときにアプリケーションイベントを公開できるようにしました。詳細については、ストリームからの読み取りを参照してください。

バリアの変更

BarrierMessageHandler は、遅延到着トリガーメッセージが送信される破棄チャネルをサポートするようになりました。詳細については、スレッドバリアを参照してください。

AMQP の変更

AMQP 送信エンドポイントは、RabbitMQ Delayed Message Exchange プラグインを使用する場合の遅延式の設定をサポートするようになりました。

受信エンドポイントは Spring AMQP DirectMessageListenerContainer をサポートするようになりました。

ポーリング可能な AMQP-backed チャネルは、ポーラーの構成済み receiveTimeout のポーラースレッドをブロックするようになりました(デフォルト: 1 秒)。

メッセージコンバーターによってメッセージプロパティに追加される contentType などのヘッダーが、最終メッセージで使用されるようになりました。以前は、最終ヘッダーにどのヘッダーとメッセージプロパティが表示されるかはコンバーター型に依存していました。コンバーターによって設定されたヘッダーをオーバーライドするには、headersMappedLast プロパティを true に設定します。詳細については、AMQP サポートを参照してください。

HTTP の変更

デフォルトでは、DefaultHttpHeaderMapper.userDefinedHeaderPrefix プロパティは X- ではなく空の文字列になりました。詳細については、HTTP ヘッダーマッピングを参照してください。

デフォルトでは、uriVariablesExpression は SimpleEvaluationContext を使用するようになりました(5.0.4 以降)。

詳細については、URI 変数のマッピングを参照してください。

MQTT の変更

アプリケーションがメッセージを中継するときに、送信メッセージへの不注意な伝播を回避するために、受信メッセージが RECEIVED_TOPICRECEIVED_QOSRECEIVED_RETAINED ヘッダーにマップされるようになりました。

送信チャネルアダプターは、トピック、qos、保持プロパティの式をサポートするようになりました。デフォルトは同じままです。詳細については、MQTT サポートを参照してください。

STOMP の変更

Project Reactor 3.1 および reactor-netty 拡張に基づいて、ReactorNettyTcpStompClient を使用するように STOMP モジュールを変更しました。ReactorNettyTcpStompClient の基礎に従って、Reactor2TcpStompSessionManager を ReactorNettyTcpStompSessionManager に名前変更しました。詳細については、STOMP サポートを参照してください。

Web サービスの変更

WebServiceOutboundGateway インスタンスに外部で構成された WebServiceTemplate インスタンスを提供できるようになりました。

DefaultSoapHeaderMapper は、javax.xml.transform.Source ユーザー定義ヘッダーを SOAP ヘッダー要素にマップできるようになりました。

シンプルな WebService 受信および送信ゲートウェイは、完全な WebServiceMessage を payload として処理できるようになり、MTOM 添付ファイルの操作が可能になりました。

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

Redis の変更

RedisStoreWritingMessageHandler には、SpEL 式用の追加の String ベースの setter が提供されています(Java 構成の便宜上)。RedisStoreWritingMessageHandler でも zsetIncrementExpression を構成できるようになりました。さらに、ZADD Redis コマンドの INCR オプションはオプションであるため、このプロパティは true から false に変更されました。

Redis リスナー呼び出しを実行するために、RedisInboundChannelAdapter に Executor を提供できるようになりました。さらに、受信したメッセージには、メッセージのソース(トピックまたはパターン)を示す RedisHeaders.MESSAGE_SOURCE ヘッダーが含まれるようになりました。

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

TCP の変更

TCP 接続をスレッドにバインドする新しい ThreadAffinityClientConnectionFactory を追加しました。

PushbackInputStream インスタンスをサポートするように TCP 接続ファクトリを構成して、デシリアライザーが「先読み」後にバイトを「未読」(プッシュバック)できるようになりました。

必要に応じて、受信データを制御およびバッファリングするために、maxMessageSize なしの ByteArrayElasticRawDeserializer を追加しました。

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

JDBC の変更

JdbcMessageChannelStore は ChannelMessageStorePreparedStatementSetter に setter を提供するようになり、ストアへのメッセージ挿入をカスタマイズできるようになりました。

ExpressionEvaluatingSqlParameterSourceFactory は sqlParameterTypes に setter を提供するようになり、パラメーターの SQL 型をカスタマイズできるようになりました。

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

メトリクスの変更

Micrometer (英語) アプリケーション監視がサポートされるようになりました(バージョン 5.0.2 以降)。詳細については、Micrometer 統合を参照してください。

バージョン 5.0.3 の Micrometer Meters に変更が加えられ、寸法システムでの使用により適したものになりました。5.0.4 でさらに変更が行われました。Micrometer を使用する場合、バージョン 5.0.4 以上を推奨します。

@EndpointId アノテーション

バージョン 5.0.4 で導入されたこのアノテーションは、Java 構成を使用する場合に Bean 命名の制御を提供します。詳細については、エンドポイント Bean 名を参照してください。