4.3 和 5.0 之間的更改
新增元件
5.0 版本新增了許多元件。
Java DSL
獨立的 Spring Integration Java DSL 專案現已合併到核心 Spring Integration 專案中。用於通道介面卡和閘道器的 IntegrationComponentSpec 實現已分發到其特定模組。有關 Java DSL 支援的更多資訊,請參閱 Java DSL。另請參閱 4.3 到 5.0 遷移指南,瞭解遷移到 Spring Integration 5.0 所需的步驟。
測試支援
我們建立了一個新的 Spring Integration 測試框架,以幫助測試 Spring Integration 應用程式。現在,透過在測試類上使用 @SpringIntegrationTest 註解和 MockIntegration 工廠,您可以讓整合流的 JUnit 測試變得更容易一些。
有關更多資訊,請參閱 測試支援。
內容型別轉換
現在我們使用基於新 InvocableHandlerMethod 的基礎設施進行服務方法呼叫,我們可以執行 contentType 從有效負載到目標方法引數的轉換。
有關更多資訊,請參閱 內容型別轉換。
ErrorMessagePublisher 和 ErrorMessageStrategy
我們添加了 ErrorMessagePublisher 和 ErrorMessageStrategy,用於建立 ErrorMessage 例項。
有關更多資訊,請參閱 錯誤處理。
一般更改
Spring Integration 現在完全基於 Spring Framework 5.0 和 Project Reactor 3.1。不再支援以前的 Project Reactor 版本。
核心更改
@Poller 註解現在具有 errorChannel 屬性,可以更輕鬆地配置底層 MessagePublishingErrorHandler。有關更多資訊,請參閱 註解支援。
所有請求-回覆端點(基於 AbstractReplyProducingMessageHandler)現在都可以啟動事務,因此使整個下游流具有事務性。有關更多資訊,請參閱 事務支援。
SmartLifecycleRoleController 現在提供獲取角色中端點狀態的方法。有關更多資訊,請參閱 端點角色。
預設情況下,POJO 方法現在使用 InvocableHandlerMethod 呼叫,但您可以像以前一樣配置它們以使用 SpEL。有關更多資訊,請參閱 POJO 方法呼叫。
當將 POJO 方法作為訊息處理程式時,您現在可以使用 @Default 註解標記其中一個服務方法,以為不匹配的條件提供回退機制。有關更多資訊,請參閱 配置服務啟用器。
我們添加了一個簡單的 PassThroughTransactionSynchronizationFactory,以始終將輪詢訊息儲存在當前事務上下文中。該訊息用作 MessagingException 的 failedMessage 屬性,該異常包裝了事務完成期間丟擲的任何原始異常。有關更多資訊,請參閱 事務同步。
聚合器基於表示式的 ReleaseStrategy 現在針對 MessageGroup 而不是僅針對 Message<?> 集合評估表示式。有關更多資訊,請參閱 聚合器和 Spring 表示式語言 (SpEL)。
您現在可以為 ObjectToMapTransformer 提供定製的 JsonObjectMapper。
有關更多資訊,請參閱 聚合器和 Spring 表示式語言 (SpEL)。
@GlobalChannelInterceptor 註解和 <int:channel-interceptor> 現在支援對元件名稱匹配使用負模式(透過在前面加上 !)。有關更多資訊,請參閱 全域性通道攔截器配置。
當候選者未能獲取鎖時,LockRegistryLeaderInitiator 現在透過 DefaultLeaderEventPublisher 發出新的 OnFailedToAcquireMutexEvent。有關更多資訊,請參閱 領導事件處理。
閘道器更改
當閘道器方法具有 void 返回型別並提供了錯誤通道時,閘道器現在會正確設定 errorChannel 頭。以前,該頭未填充。這導致同步下游流(在呼叫執行緒上執行)將異常傳送到配置的通道,但非同步下游流上的異常將被髮送到預設的 errorChannel。
RequestReplyExchanger 介面現在具有 throws MessagingException 子句,以滿足提議的訊息交換契約。
您現在可以使用 SpEL 表示式指定請求和回覆超時。有關更多資訊,請參閱 訊息閘道器。
聚合器效能更改
預設情況下,聚合器現在使用 SimpleSequenceSizeReleaseStrategy,這更高效,尤其是對於大型組。空組現在在 empty-group-min-timeout 後安排刪除。有關更多資訊,請參閱 聚合器。
拆分器更改
拆分器元件現在可以處理和拆分 Java Stream 和 Reactive Streams Publisher 物件。如果輸出通道是 ReactiveStreamsSubscribableChannel,AbstractMessageSplitter 會為後續迭代構建一個 Flux 而不是常規的 Iterator,這與被拆分的物件無關。此外,AbstractMessageSplitter 提供了 protected obtainSizeIfPossible() 方法,如果可能,允許確定 Iterable 和 Iterator 物件的大小。有關更多資訊,請參閱 拆分器。
JMS 更改
以前,Spring Integration JMS XML 配置對 JMS 連線工廠使用預設的 bean 名稱 connectionFactory,從而允許在元件定義中省略該屬性。我們將其重新命名為 jmsConnectionFactory,這是 Spring Boot 用於自動配置 JMS 連線工廠 bean 的 bean 名稱。
如果您的應用程式依賴於以前的行為,您可以將 connectionFactory bean 重新命名為 jmsConnectionFactory,或者透過使用其當前名稱專門配置您的元件以使用您的 bean。有關更多資訊,請參閱 JMS 支援。
郵件更改
一些 IMAP 郵件內容渲染不一致的問題已解決。有關更多資訊,請參閱 “郵件接收通道介面卡”部分中的注意事項。
Feed 更改
我們引入了一個新的 Resource 屬性,用於 FeedEntryMessageSource,而不是使用 ROME 中已棄用的 com.rometools.fetcher.FeedFetcher。有關更多資訊,請參閱 Feed 介面卡。
檔案更改
我們引入了新的 FileHeaders.RELATIVE_PATH 訊息頭,用於在 FileReadingMessageSource 中表示相對路徑。
尾部介面卡現在支援 idleEventInterval,以便在該期間檔案中沒有資料時發出事件。
FileWritingMessageHandler 的 flush 謂詞現在有一個附加引數。
檔案出站通道介面卡和閘道器(FileWritingMessageHandler)現在支援 REPLACE_IF_MODIFIED FileExistsMode。
它們現在還支援在新寫入的檔案上設定檔案許可權。
現在可以使用新的 FileSystemMarkerFilePresentFileListFilter。有關更多資訊,請參閱 處理不完整資料。
FileSplitter 現在提供了一個 firstLineAsHeader 選項,用於將內容的第一行作為訊息頭攜帶到為其餘行發出的訊息中。
有關更多資訊,請參閱 檔案支援。
FTP 和 SFTP 更改
入站通道介面卡現在具有一個名為 max-fetch-size 的屬性,用於限制在本地目錄中當前沒有檔案時在輪詢期間獲取的檔案數量。預設情況下,它們還配置了一個 local-filter 中的 FileSystemPersistentAcceptOnceFileListFilter。
您還可以透過設定新引入的 scanner 屬性,為入站通道介面卡提供自定義的 DirectoryScanner 實現。
您現在可以配置正則表示式和模式過濾器,以始終傳遞目錄。當您在出站閘道器中使用遞迴時,這可能很有用。
預設情況下,所有入站通道介面卡(流式和基於同步的)現在都使用適當的 AbstractPersistentAcceptOnceFileListFilter 實現來防止遠端檔案的重複下載。
FTP 和 SFTP 出站閘道器現在在獲取遠端檔案時支援 REPLACE_IF_MODIFIED FileExistsMode。
FTP 和 SFTP 流式入站通道介面卡現在在訊息頭中新增遠端檔案資訊。
FTP 和 SFTP 出站通道介面卡(以及出站閘道器的 PUT 命令)現在也支援 InputStream 作為 payload。
入站通道介面卡現在可以透過使用新引入的 RecursiveDirectoryScanner 在本地構建檔案樹。有關注入的資訊,請參閱 FTP 入站通道介面卡 部分中的 scanner 選項。此外,您現在可以將這些介面卡切換到 WatchService。
我們向 AbstractRemoteFileOutboundGateway 添加了 NLST 命令,以執行列出檔名的遠端命令。
您現在可以為 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 更改
當您使用 RabbitMQ 延遲訊息交換外掛時,AMQP 出站端點現在支援設定延遲表示式。
入站端點現在支援 Spring AMQP DirectMessageListenerContainer。
可輪詢的 AMQP 支援通道現在會阻塞輪詢器執行緒,直到輪詢器配置的 receiveTimeout(預設值:一秒)。
由訊息轉換器新增到訊息屬性中的訊息頭(例如 contentType)現在用於最終訊息。以前,哪些訊息頭和訊息屬性出現在最終訊息中取決於轉換器型別。要覆蓋由轉換器設定的訊息頭,請將 headersMappedLast 屬性設定為 true。有關更多資訊,請參閱 AMQP 支援。
HTTP 更改
預設情況下,DefaultHttpHeaderMapper.userDefinedHeaderPrefix 屬性現在是空字串,而不是 X-。有關更多資訊,請參閱 HTTP 訊息頭對映。
預設情況下,uriVariablesExpression 現在使用 SimpleEvaluationContext(自 5.0.4 起)。
有關更多資訊,請參閱 對映 URI 變數。
MQTT 更改
入站訊息現在使用 RECEIVED_TOPIC、RECEIVED_QOS 和 RECEIVED_RETAINED 訊息頭進行對映,以避免在應用程式轉發訊息時無意中傳播到出站訊息。
出站通道介面卡現在支援主題、qos 和保留屬性的表示式。預設值保持不變。有關更多資訊,請參閱 MQTT 支援。
STOMP 更改
我們將 STOMP 模組更改為使用基於 Project Reactor 3.1 和 reactor-netty 擴充套件的 ReactorNettyTcpStompClient。我們根據 ReactorNettyTcpStompClient 基礎將 Reactor2TcpStompSessionManager 重新命名為 ReactorNettyTcpStompSessionManager。有關更多資訊,請參閱 STOMP 支援。
Web 服務更改
您現在可以為 WebServiceOutboundGateway 例項提供外部配置的 WebServiceTemplate 例項。
DefaultSoapHeaderMapper 現在可以將 javax.xml.transform.Source 使用者定義的訊息頭對映到 SOAP 訊息頭元素。
簡單的 Web 服務入站和出站閘道器現在可以將完整的 WebServiceMessage 作為 payload 處理,從而允許操作 MTOM 附件。
有關更多資訊,請參閱 Web 服務支援。
Redis 更改
RedisStoreWritingMessageHandler 現在提供了基於 String 的額外 setter,用於 SpEL 表示式(為了方便 Java 配置)。您現在也可以在 RedisStoreWritingMessageHandler 上配置 zsetIncrementExpression。此外,此屬性已從 true 更改為 false,因為 ZADD Redis 命令上的 INCR 選項是可選的。
您現在可以為 RedisInboundChannelAdapter 提供一個 Executor,用於執行 Redis 監聽器呼叫器。此外,收到的訊息現在包含一個 RedisHeaders.MESSAGE_SOURCE 訊息頭,以指示訊息的來源(主題或模式)。
有關更多資訊,請參閱 Redis 支援。
TCP 更改
我們添加了一個新的 ThreadAffinityClientConnectionFactory,用於將 TCP 連線繫結到執行緒。
您現在可以配置 TCP 連線工廠以支援 PushbackInputStream 例項,從而允許反序列化器在“預讀”後“取消讀取”(回推)位元組。
我們添加了一個沒有 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 名稱。