新着情報
Spring Integration にすでに精通している方のために、この章ではバージョン 7.0 の新機能の概要を簡単に説明します。
以前のバージョンで導入された変更と機能に興味がある場合は、変更履歴を参照してください。
Spring Integration 7.0 の新機能
詳細については、7.0 開発プロセスの一環として解決された GitHub の課題 (英語) を参照してください。
全体的に、プロジェクトは最新の依存関係バージョンに移行しました。Java 17 は引き続きベースラインですが、Java 24 もサポートされています。
一般的な変更
Junit 4 ベースのサポートコンポーネントは非推奨です。
このプロジェクトでは、JSpecify (英語) アノテーションを活用して null セーフ API を公開し、ビルドの一部として NullAway [GitHub] (英語) を使用して null 可能性宣言の一貫性をチェックするようになりました。
spring-retry への依存関係とそのすべての API 使用は、Spring Framework コアモジュールの retry API に置き換えられました。この変更は、Spring ポートフォリオ全体における自然な進化です。一般的に、以下の参照が移行されました。
org.springframework.retry.support.RetryTemplate→org.springframework.core.retry.RetryTemplate;org.springframework.retry.RetryPolicy→org.springframework.core.retry.RetryPolicy;org.springframework.retry.RecoveryCallback→org.springframework.integration.core.RecoveryCallback。Spring Framework にはRecoveryCallbackの抽象化は存在せず、RetryException上の通常のtry..catchで十分です。Spring Integration では、RecoveryCallbackはエラーチャネルへのデッドレターパブリッシャーとして機能します。org.springframework.retry.backoff.BackOffPolicy→org.springframework.util.backoff.BackOff。ただし、これはRetryTemplateオプションとして直接公開されるのではなく、RetryPolicy.Builder経由の設定によってサポートされる内部 API として公開されます。AMPQ、JMS、Apache Kafka チャネルアダプターの
RetryContextは、内部AttributeAccessor実装に置き換えられます。
次のプロジェクトクラスに重大な変更が発生しました。
AmqpBaseInboundChannelAdapterSpecAmqpBaseInboundGatewaySpecAmqpInboundChannelAdapterAmqpInboundGatewayPostgresSubscribableChannelChannelPublishingJmsMessageListenerJmsInboundGatewaySpecJmsMessageDrivenChannelAdapterSpecKafkaInboundGatewaySpecKafkaMessageDrivenChannelAdapterSpecKafkaInboundEndpointKafkaInboundGatewayKafkaMessageDrivenChannelAdapter
RequestHandlerRetryAdvice は、外部 API を可能な限り回避するように再構築されました。ステートレスなリトライロジックについては、org.springframework.core.retry.RetryPolicy を提供するだけで十分です。ステートフルなリトライロジックは Function<Message<?>, Object> stateKeyFunction によって起動されます。RetryStateGenerator 抽象化とその SpelExpressionRetryStateGenerator 実装は、spring-retry API への依存のため削除されました。
<int:handler-retry-advice> XML コンポーネントの max-attempts 属性は、失敗したハンドラーの呼び出し試行回数に関するこのプロパティのロジックをより適切に反映するために、max-retries に名前が変更されました。
詳細については、再試行のアドバイスを参照してください。
すべてのモジュールが標準パッケージ構造に従うようになりました。受信および送信コンポーネントは、それぞれ inbound パッケージと outbound パッケージで宣言されています。MessageChannel の実装は channel パッケージで宣言されています。ほとんどのモジュールは最初からこのルールに従っています。このバージョンでのパッケージ構造のリファクタリングには、残りのモジュール(spring-integration-file、spring-integration-ftp、spring-integration-ip、spring-integration-jdbc、spring-integration-jms、spring-integration-jmx、spring-integration-mail、spring-integration-sftp、spring-integration-stream、spring-integration-ws)も含まれます。ルートパッケージにあったクラスは、非推奨としてマークされています。
新規コンポーネント
新しい DistributedLock インターフェースが導入され、カスタム TTL (Time-to-Live) でロックを取得するための新しいメソッド lock(Duration ttl と tryLock(long time, TimeUnit unit, Duration ttl) が提供されます。詳細については、分散ロックを参照してください。
Jackson 2 サポートは非推奨となり、削除されました。Jackson 3 は新しいコンポーネント JacksonJsonObjectMapper、JacksonPropertyAccessor、JacksonIndexAccessor、JacksonMessagingUtils でデフォルトになりました。詳細については、それぞれの Javadoc を参照してください。また、移行パスについては、非推奨となりたクラスを参照してください。
spring-integration-amqp モジュールは、RabbitMQ AMQP 1.0 サポート用のチャネルアダプターを実装しました。詳細については、AMQP 1.0 サポートの章を参照してください。
JDBC の変更
JDBC モジュールは、専用の org.springframework.integration.jdbc.dsl.Jdbc ファクトリを介して Java DSL API を提供するようになりました。詳細については、JDBC コンポーネント用の Java DSL の章を参照してください。
JdbcLock は、ロックステータスデータの TTL(Time to Live)をカスタマイズする機能をサポートするようになりました。詳細については、JDBC ロックレジストリを参照してください。
メッセージストアでは、直列化されたメッセージの内容が必ずしもバイト配列として保存されるとは限らないため、MESSAGE_BYTES ではなく MESSAGE_CONTENT という列名を使用するようになりました。また、すべての標準 SQL スキーマも変更され、INT_MESSAGE および INT_CHANNEL_MESSAGE テーブルのそれぞれの列には MESSAGE_CONTENT という列名が使用されるようになりました。詳細については、JDBC メッセージストアを参照してください。
JdbcChannelMessageStore は、Java シリアライゼーションの代替として JSON シリアライゼーションをサポートするようになりました。新しいコンポーネント JsonChannelMessageStorePreparedStatementSetter と JsonMessageRowMapper を使用すると、JSON 形式でメッセージを保存できます。これには、バイナリ型ではなくテキストベースの列型(JSONB、JSON、TEXT や CLOB など)を使用するようにデータベーススキーマを変更する必要があります。詳細については、JDBC チャネルメッセージストア JSON 直列化を参照してください。
Redis の変更
RedisLock は、ロックステータスデータの TTL(Time to Live)をカスタマイズする機能をサポートするようになりました。詳細については、Redis ロックレジストリを参照してください。
Hazelcast の変更
spring-integation-hazelcast モジュール内の以前は非推奨だったクラス ( LeaderInitiator、HazelcastMembershipListener、HazelcastLocalInstanceRegistrar、HazelcastLockRegistry など) は、オープンソースの Hazelcast ライブラリで CP サブシステムがサポートされていないため、削除されました。
MQTT の変更
AbstractMqttMessageDrivenChannelAdapter および ClientManager 実装に quiescentTimeout オプションが追加されました。このオプションは、stop() メソッドを通じて MQTT Paho クライアントの disconnectForcibly() API に伝播されます。詳細については、MQTT サポートを参照してください。
ファイルの変更
The FileReadingMessageSource now can be configured with a SpEL Expression for its directory property. See ファイルを読む for more information.
リモートファイルのサポートの変更
The AbstractInboundFileSynchronizer now caches a filtered result of the Session.list(remoteDirectory) after slicing by the maxFetchSize. So, later synchronizations deal with the cache only by the maxFetchSize until the cache is exhausted. See 受信チャネルアダプター: リモートファイルフェッチの制御 for more information.
All the AbstractPersistentAcceptOnceFileListFilter implementations now use a "long file name" for the metadata entry key. Previously, just a file name may cause the metadata overriding problem when the same filter is used for different directories with same file names. For example, the RotatingServerAdvice may switch to directories based on the timestamp, but files are placed there with the same name according to business logic. See リモート永続ファイルリストフィルター for more information.
null 安全
Updated the codebase to use JSpecify and NullAway, adding a comprehensive null safety implementation that uses @NullMarked annotations to default all types to non-null at the package level and @Nullable annotations to explicitly mark types that can be null. See null 安全 for more information.
SMB Support Changes
The JCIFS library behind the SMB support module has been upgraded to 3.0.0. It is a major rewrite of the codebase and implements a new package structure. This is a breaking change, and direct references to components of the JCIFS library will need to be updated. See SMB サポート for more information.