Spring Integration 是 Spring 框架推出的企業應用集成(EAI)解決方案。在集成領域,傳統手段包括硬編碼的 Java 客戶端、ESB 產品、消息隊列等。Spring Integration 在輕量化、易測試、低門檻上具有顯著優勢:它幾乎零配置啟動,概念上比自行開發的集成方案更簡單,長期來看更靈活、適應性更強。一旦上手,你會愛上它的優雅設計。
它能與 EJB、RMI、JMS 等標準技術協同工作,將複雜的集成邏輯集中建模,增強標準技術的使用體驗。由於輕量部署(與應用共同部署,而非將應用部署到 ESB 容器),加上完善的 XML Schema、POJO 風格 API、與 Spring 生態深度整合,Spring Integration 在眾多 ESB 產品中脫穎而出。
Spring Integration 完全建立在 Spring 容器之上:配置仍是標準 Spring Schema,所有組件皆為 Spring Bean,享有依賴注入、AOP 等特性。你可以用 main(String[] args) 啟動整個集成流程,無需專用運行時——應用上下文即總線,上下文可用,總線即存在。
EAI 旨在連接應用間的數據與服務。參考《企業集成模式》一書,歸納出四種基本風格:
現實中,單一協議無法覆蓋所有場景(如舊系統僅支持 FTP 批處理文件),傳統 JEE 中間件在異構集成上往往力不從心,導致點對點通道激增、架構腐化。Spring Integration 以輕量 ESB 風格化解此難題。
典型 ESB 提供:路由、消息轉換、調解、複雜事件處理(CEP)、服務調用,以及日誌、審計、安全、管理等輔助功能。下表對比 Spring Integration 與傳統 JEE 中間件:
| 能力 | Spring Integration / ESB | 傳統 JEE 中間件 |
|---|---|---|
| 消息隊列 | XML 配置支持所有常見模式 | Spring JMS 可用但較複雜 |
| RPC | 消費/提供/代理多種 RPC | 可能性多但無標準方法 |
| 異構系統集成 | 專為分離、標準化、代理設計 | 僅支持部分用例,易變複雜 |
| 安全 | 支持良好 | 支持良好 |
| 舊系統支持 | 批處理文件、FTP 等原生支持 | 除 CORBA 外幾無支持 |
| 靈活路由 | 決策延遲到運行時 | 配置分散,難有全局視圖 |
| 非標準需求擴展 | POJO 方式極易擴展,無需應用服務器 | 需深入 JCA 或類 Tuxedo 系統 |
Spring Integration 開箱即用,開發體驗極佳:可全 POJO 編碼,也可混用框架類,測試友好,適合已習慣輕量框架的團隊。
需求:郵件發送到指定郵箱,自動解析並發布為博客文章。示例使用 Apache Roller,避開繁瑣的 WYSIWYG 編輯器。
<int:poller default="true" fixed-rate="5000"/>
<int:channel id="emailsIn"/>
<int:channel id="blogPosts"/>
<int:channel id="publishedPosts"/>
<int-mail:inbound-channel-adapter
id="mailAdapter"
channel="emailsIn"
host="pop3.example.com"
username="blogger"
password="secret"
java-mail-properties="mailProps"/>
<int:transformer
input-channel="emailsIn"
output-channel="blogPosts"
ref="emailToBlogTransformer"/>
<int:filter
input-channel="blogPosts"
output-channel="publishedPosts"
ref="emailsInFilterAgainstWhitelist"/>
<int:service-activator
input-channel="publishedPosts"
ref="newBlogPublishingServiceActivator"
method="publishIncomingBlogEntry"/>

Message<MimeMessage> 送入 emailsIn 通道。emailToBlogTransformer 解析郵件,構建領域對象 BlogPost,保留原消息頭(含唯一 ID)。emailsInFilterAgainstWhitelist 檢查發件人白名單,攔截垃圾郵件。newBlogPublishingServiceActivator.publishIncomingBlogEntry 發布文章。Spring Integration 以乾淨、簡練的方式實現 EAI,是重量級 ESB 的低摩擦替代品。它溫和地解決最棘手的集成難題,讓開發者專注於業務邏輯而非基礎設施。