新增功能
對於已經熟悉 Spring Integration 的使用者,本章簡要概述了 7.0 版本的新功能。
如果您對早期版本中引入的更改和功能感興趣,請參閱 更改歷史。
Spring Integration 7.0 有哪些新功能?
有關更多詳細資訊,請參閱作為 7.0 開發過程一部分解決的 GitHub 問題。
總的來說,該專案已遷移到最新的依賴版本。Java 17 仍然是基線,但支援 Java 24。
一般更改
基於 Junit 4 的支援元件已棄用。
spring-retry 依賴及其所有 API 使用已被 Spring Framework Core 模組中的重試 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實現替換。
因此,以下專案類發生了重大更改:
-
AmqpBaseInboundChannelAdapterSpec -
AmqpBaseInboundGatewaySpec -
AmqpInboundChannelAdapter -
AmqpInboundGateway -
PostgresSubscribableChannel -
ChannelPublishingJmsMessageListener -
JmsInboundGatewaySpec -
JmsMessageDrivenChannelAdapterSpec -
KafkaInboundGatewaySpec -
KafkaMessageDrivenChannelAdapterSpec -
KafkaInboundEndpoint -
KafkaInboundGateway -
KafkaMessageDrivenChannelAdapter
RequestHandlerRetryAdvice 已重新構建,儘可能避免外部 API。對於無狀態重試邏輯,只需提供一個 org.springframework.core.retry.RetryPolicy 就足夠了。有狀態重試邏輯由 Function<Message<?>, Object> stateKeyFunction 啟用。由於依賴於 spring-retry API,RetryStateGenerator 抽象及其 SpelExpressionRetryStateGenerator 實現已被刪除。
<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 介面,提供了新方法 lock(Duration ttl) 和 tryLock(long time, TimeUnit unit, Duration ttl),以獲取具有自定義生存時間 (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 現在支援自定義鎖狀態資料生存時間的功能。有關更多資訊,請參閱 JDBC 鎖登錄檔。
訊息儲存現在使用 MESSAGE_CONTENT 列名來儲存序列化訊息,而不是 MESSAGE_BYTES,因為內容可能不總是作為位元組陣列儲存。所有開箱即用的 SQL 模式也已更改,以在 INT_MESSAGE 和 INT_CHANNEL_MESSAGE 表中依賴 MESSAGE_CONTENT 名稱作為相應列。有關更多資訊,請參閱 JDBC 訊息儲存。
JdbcChannelMessageStore 現在支援 JSON 序列化作為 Java 序列化的替代方案。新的元件 JsonChannelMessageStorePreparedStatementSetter 和 JsonMessageRowMapper 允許以 JSON 格式儲存訊息。這需要修改資料庫模式以使用基於文字的列型別(如 JSONB、JSON、TEXT 或 CLOB)而不是二進位制型別。有關更多資訊,請參閱 JDBC 通道訊息儲存 JSON 序列化。
Redis 更改
RedisLock 現在支援自定義鎖狀態資料生存時間的功能。有關更多資訊,請參閱 Redis 鎖登錄檔。
Hazelcast 更改
之前在 spring-integration-hazelcast 模組中已棄用的類,如 LeaderInitiator、HazelcastMembershipListener、HazelcastLocalInstanceRegistrar 和 HazelcastLockRegistry,由於 Hazelcast 開源庫不支援 CP 子系統,現已移除。
MQTT 更改
AbstractMqttMessageDrivenChannelAdapter 和 ClientManager 實現現在公開了一個 quiescentTimeout 選項,該選項在其 stop() 方法中傳播到 MQTT Paho 客戶端的 disconnectForcibly() API。有關更多資訊,請參閱 MQTT 支援。
檔案更改
FileReadingMessageSource 現在可以使用 SpEL Expression 配置其 directory 屬性。有關更多資訊,請參閱 讀取檔案。
遠端檔案支援更改
AbstractInboundFileSynchronizer 現在會在按 maxFetchSize 切片後快取 Session.list(remoteDirectory) 的過濾結果。因此,後續同步僅處理快取中的 maxFetchSize,直到快取耗盡。有關更多資訊,請參閱 入站通道介面卡:控制遠端檔案獲取。
所有 AbstractPersistentAcceptOnceFileListFilter 實現現在都使用“長檔名”作為元資料條目鍵。以前,僅檔名可能導致當同一過濾器用於具有相同檔名的不同目錄時元資料覆蓋問題。例如,RotatingServerAdvice 可能會根據時間戳切換目錄,但檔案根據業務邏輯以相同名稱放置在那裡。有關更多資訊,請參閱 遠端持久檔案列表過濾器。
空安全
更新了程式碼庫以使用 JSpecify 和 NullAway,添加了全面的空安全實現,該實現使用 @NullMarked 註解將所有型別預設為包級別的非空,並使用 @Nullable 註解明確標記可以為空的型別。有關更多資訊,請參閱 空安全。
SMB 支援更改
SMB 支援模組背後的 JCIFS 庫已升級到 3.0.0。這是程式碼庫的重大重寫,並實現了新的包結構。這是一個重大更改,對 JCIFS 庫元件的直接引用需要更新。有關更多資訊,請參閱 SMB 支援。