引入Spring集成

在本文中,我們介紹Spring Integration 。 如果您以前沒有使用過Spring Integration,那么可能會幫助您復習Gregor Hohpe的Enterprise Integration Patterns 。 我還將推薦Josh Long 撰寫的這篇出色的介紹性文章 。

上下文設置

簡而言之, 企業集成模式就是如何使兩個應用程序(可能位于不同的技術堆棧,不同的機器,不同的網絡上)相互通信,以提供單個業務功能。 面臨的挑戰是如何確保這種通信對業務用戶保持透明,同時又對應用程序可靠且容易。 消息傳遞是模式之一。 使用此模式,應用程序可以使用可自定義的格式頻繁,立即,可靠和異步地相互通信。 應用程序通過在虛擬管道(稱為Channels )上發送數據(稱為Messages )來相互交談。 這是對該概念的過于簡單的介紹,但希望足以理解本文的其余部分。

Spring Integration不是任何模式的實現,但是它支持這些模式,主要是消息傳遞。

本文的其余部分將動手實踐,并且是Spring 3系列的擴展。本系列的早期文章包括:

  1. Hello World with Spring 3 MVC
  2. 使用Spring 3 MVC處理表單
  3. 使用Spring 3進行單元測試和記錄
  4. 使用Spring 3 MVC處理表單驗證

事不宜遲,讓我們開始吧。

裸露骨骼的Spring集成示例

在撰寫本文時,Spring的最新版本是3.1.2.RELEASE。 但是,最新版本的Spring Integration是2.1.3.RELEASE,可在Maven Central中找到。 我有些不滿意-回想起來不合邏輯-對Spring和Spring Integration應該具有不同的最新版本感到吃驚,但是,嘿,就是這樣。 這意味著我們的pom.xml現在應該添加一個(如果您想知道那是從何而來的,至少在很高的層次上,我需要在本文前面提到的Spring 3系列繼續學習)。

文件:/pom.xml

<!-- Spring integration -->                           
<dependency>                                          <groupId>org.springframework.integration</groupId><artifactId>spring-integration-core</artifactId>  <version>2.1.3.RELEASE</version>                  
</dependency>

pom中的這一依賴性現在允許我的應用程序通過channel發送消息 。 請注意,現在我們在Spring Integration領域中引用消息和通道,這不一定與本文前面在Enterprise Integration Patterns領域中引用的相同概念完全相同。 此時可能值得快速瀏覽一下《 Spring Integration參考手冊》 。 但是,如果您剛剛開始使用Spring Integration,那么暫時最好閱讀本文。 我建議您先洗手,然后再返回參考手冊,該手冊非常好,但也非常詳盡,因此對于初學者來說可能不勝枚舉。

為簡單起見,由于我通常嘗試(盡可能)嘗試第一種方法,因此讓我們嘗試編寫一些單元測試以創建消息,然后通過通道發送它,然后再接收它。 我在這里寫了關于如何在Spring 3應用程序中使用JUnit和Logback的博客 。 繼續相同的原理,假設我們要編寫一個HelloWorldTest.java,讓我們為測試設置Spring配置。

文件:\ src \ test \ resources \ org \ academy \ integration \ HelloWorldTest-context.xml

<?xml version='1.0' encoding='UTF-8'?>
<beans xmlns='http://www.springframework.org/schema/beans'xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:p='http://www.springframework.org/schema/p' xmlns:int='http://www.springframework.org/schema/integration' xsi:schemaLocation='http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/integration 
http://www.springframework.org/schema/integration/spring-integration-2.1.xsd'><int:channel id='inputChannel'></int:channel><int:channel id='outputChannel'><int:queue capacity='10' /></int:channel><int:service-activator input-channel='inputChannel'output-channel='outputChannel' ref='helloService' method='greet' /><bean id='helloService'class='org.academy.integration.HelloWorld' /> </beans>

那么,我們只是做什么? 我們已經要求Spring Integration創建一個“ inputChannel”來發送消息。 從中讀取消息的“ outputChannel”。 我們還配置了將“ inputChannel”上的所有消息都移交給“ helloService”的功能。 此“ helloService”是org.academy.integration.HelloWorld類的實例,應具有對消息進行某些處理的能力。 之后,我們還配置了“ helloService”的輸出,即在這種情況下修改后的消息,將被移交給“ outputChannel”。 很簡單,不是嗎? 坦率地說,當我幾年前第一次與Spring Integration合作時,我發現所有這些都令人困惑。 直到我看到這個工作對我來說,這沒有多大意義。 因此,讓我們繼續前進。 讓我們添加關鍵業務 HelloWorld類。

文件:/src/main/java/org/academy/integration/HelloWorld.java

package org.academy.integration;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class HelloWorld {private final static Logger logger = LoggerFactory.getLogger(HelloWorld.class);public String greet(String name){logger.debug('Greeting {}', name); return 'Hello ' + name; }
}

如您所見,給定一個“名稱”,它將返回“ Hello {name}”。 現在,讓我們添加單元測試以實際執行此操作。

文件:/src/test/java/org/academy/integration/HelloWorldTest.java

package org.academy.integration;import static org.junit.Assert.*;import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.integration.MessageChannel;
import org.springframework.integration.core.PollableChannel;
import org.springframework.integration.message.GenericMessage;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class HelloWorldTest {private final static Logger logger = LoggerFactory.getLogger(HelloWorldTest.class);@Autowired@Qualifier('inputChannel')MessageChannel inputChannel;@Autowired@Qualifier('outputChannel')PollableChannel outputChannel;@Testpublic void test() {inputChannel.send(new GenericMessage<String>('World'));assertEquals(outputChannel.receive().getPayload(), 'Hello World');logger.debug('Checked basic Hello World with Spring Integration');}}

盡管不是強制性的,但我發現使用以下登錄設置更容易。 如果您愿意,可以隨時使用它。

文件:/src/main/resources/logback.xml

<?xml version='1.0' encoding='UTF-8'?>
<configuration><appender name='CONSOLE' class='ch.qos.logback.core.ConsoleAppender'><encoder><pattern>%d %5p | %t | %-55logger{55} | %m %n</pattern></encoder></appender><logger name='org.springframework'><level value='ERROR' /><!-- level value='INFO' />  --><!--  level value='DEBUG' />  --></logger><root><level value='DEBUG' /><appender-ref ref='CONSOLE' /></root>
</configuration>

現在,只需鍵入“ mvn -e clean install”(或使用m2e插件),您就應該能夠運行單元測試并確認給定的字符串“ World”,HelloWorld服務的確在整個通道安排中確實返回了“ Hello World”和消息。

同樣,可選但我強烈建議您運行“ mvn -e全新安裝站點”。 假設您已正確配置了一些代碼覆蓋率工具(在我的情況下為cobertura),將為您提供一個不錯HTML報告,其中顯示了代碼覆蓋率。 在這種情況下,它將是100%。 我已經寫了一系列關于代碼質量的文章 ,詳細介紹了該主題,但是總而言之,確保我使用和推薦使用的任何編碼實踐/框架都符合一些基本的代碼質量標準對我來說非常重要。 。 能夠進行單元測試和測量是我所做的這樣一項基本檢查。 毋庸置疑,一般來說,Spring(包括Spring集成)會通過帶有鮮艷色彩的檢查。

結論

本文就是這樣。 在下一篇文章中,我們將了解如何將應用程序代碼與我們當前的JUnit測試中具有的Spring Integration特定代碼 (即inputChannel.send(…)等) 隔離 。

建議進一步閱讀...
以下是本系列早期文章的鏈接:

  1. Hello World with Spring 3 MVC
  2. 使用Spring 3 MVC處理表單
  3. 使用Spring 3進行單元測試和記錄
  4. 使用Spring 3 MVC處理表單驗證

這些是我可以推薦的出色材料:

  1. Spring Integration入門
  2. Spring Integration的示例代碼
  3. Spring集成–第1節– Hello World
  4. Spring集成–第2節–更多世界

繼續與網關進行Spring集成

參考:在Tech for Enterprise博客中,我們的JCG合作伙伴 Partho 介紹了Spring Integration 。


翻譯自: https://www.javacodegeeks.com/2012/08/introducing-spring-integration.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371809.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371809.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371809.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PAT 1024. 科學計數法 (20)

科學計數法是科學家用來表示很大或很小的數字的一種方便的方法&#xff0c;其滿足正則表達式[-][1-9]"."[0-9]E[-][0-9]&#xff0c;即數字的整數部分只有1位&#xff0c;小數部分至少有1位&#xff0c;該數字及其指數部分的正負號即使對正數也必定明確給出。 現以科…

Mac上Hive環境搭建

本文介紹在Mac上搭建Hive環境。 建議首先配置好Hadoop&#xff0c;搭建與配置可以參考我之前的博文Mac Hadoop的安裝與配置。 當然你也可以選擇使用Docker搭建環境&#xff0c;本文不作介紹。 安裝 對于MacOs&#xff0c;推薦使用HomeBrew安裝hive&#xff0c;一步到位。 $ bre…

mysql+創建備份賬戶_mysql 添加用戶,授予權限,數據庫備份等 (轉載)

一&#xff0c;連接MySQL格式&#xff1a;mysql -h 遠程主機地址 -u 用戶名 -p 回車輸入密碼進入&#xff1a;mysql -u root -p 回車Enter password: ,輸入密碼就可以進入mysql> 進入了退出命令:>exit 或者ctrlD二&#xff0c;MySQL管理與授權1.修改密碼&#xff1a;格式…

分代緩存和轉換

康拉德&#xff08;Konrad&#xff09;最近在我們公司的技術室中分享了有關如何完成緩存的有趣文章&#xff0c;這是一個大型的波蘭社交網絡nk.pl。 算法中的核心概念之一是分代緩存 &#xff08;請參閱此處或此處 &#xff09;。 基本思想是&#xff0c;對于緩存鍵&#xff0c…

css精靈

○ css 精靈&#xff08;Sprites&#xff09;技術利用photoshop將圖片整合&#xff0c;然后用background-images&#xff0c;background-position&#xff0c;background-repeat技術&#xff0c;對圖片進行精確定位。 ○ 優點&#xff1a;減少http請求數量&#xff0c;減少服務…

基于Jenkins+Gitlab的自動化部署實戰

故事背景 一個中小型企業&#xff0c;是典型的互聯網公司&#xff0c;當初期的時候可能運維只能標配到2~3人&#xff0c;此時隨著公司的發展&#xff0c;項目會逐漸增多。前期部署項目可能都是手動的&#xff0c; 俗稱“人肉部署”&#xff0c;這簡直是無比的痛苦&#xff0c;不…

cmd如何刷新MySQL數據庫_怎樣在cmd中用命令操作MySQL數據庫 需要技巧

用命令來操作MySQL是工作必備的&#xff0c;今天我就來分享一下cmd命令操作MySQL數據庫的方法&#xff0c;希望有幫助。工具/材料電腦xampp操作方法01首先&#xff0c;啟動MySQL服務才行哦。這里我是用xampp集成的數據庫&#xff0c;方便&#xff0c;點擊‘start’。02如圖&…

Java順序IO性能

許多應用程序將一系列事件記錄到基于文件的存儲中&#xff0c;以供以后使用。 從日志記錄和審核&#xff0c;直到在事件源設計或其緊密相關的CQRS中保留事務重做日志&#xff0c;這都可以是任何東西。 Java具有多種方法&#xff0c;可以通過這些方法將文件順序寫入或重新讀取。…

text段,data段,bss段,堆和棧

.bss段和.data段的區別 text段,data段,bss段,堆和棧轉載于:https://www.cnblogs.com/jingzhishen/p/6203107.html

[BZOJ3529][Sdoi2014]數表

[BZOJ3529][Sdoi2014]數表 試題描述 有一張Nm的數表&#xff0c;其第i行第j列&#xff08;1 < i < n&#xff0c;1 < j < m&#xff09;的數值為能同時整除i和j的所有自然數之和。給定a&#xff0c;計算數表中不大于a的數之和。輸入 輸入包含多組數據。輸入的第一行…

ZK的實際應用:MVVM –表單綁定

這是我們從頭開始構建ZK應用程序的第二集。 上一篇文章涉及使用MVVM將數據加載和呈現到表中。 在本文中&#xff0c;我們將向您介紹ZK MVVM的表單綁定。 目的 我們將構建一個“添加”功能&#xff0c;使我們能夠將新條目保存到清單中。 單擊“添加”時出現表格 單擊“保存”…

群暉按裝mysql_如何連接群暉里的MYSQL數據庫

匿名用戶1級2018-08-27 回答一、連接遠程數據庫&#xff1a;1、顯示密碼如&#xff1a;MySQL 連接遠程數據庫(192.168.5.116)&#xff0c;端口“3306”&#xff0c;用戶名為“root”&#xff0c;密碼“123456”C:/>mysql -h 192.168.5.116 -P 3306 -u root -p1234562、隱藏密…

ZK的實際應用:MVVM –以編程方式更新視圖

在前兩篇文章中&#xff0c;我們使用ZK的MVVM功能來&#xff1a; 將數據加載到表中 使用表單綁定保存數據 我們已經看到&#xff0c;用注解NotifyChange&#xff08;&#xff09;裝飾方法時&#xff0c;在執行完成后&#xff0c;將向Binder通知VM屬性的更改&#xff0c;以便B…

給你一個笑臉

今日冬至&#xff0c;愿你笑靨如初 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8" /> <title>Document</title> </head> <body> <canvas id"mycanvas" width"800px&qu…

mysql安裝與配置的截圖_windows下MySQL5.6版本安裝及配置過程附有截圖和詳細說明...

隨著MYSQL版本的更新以及電腦系統的變化&#xff0c;我們給大家整理了各種電腦環境下安裝MYSQL的圖解過程&#xff0c;希望我們整理的內容能夠幫助到大家&#xff1a;mysql安裝圖解總結https://www.jb51.net/article/142398.htm編輯者&#xff1a;Vocabulary下面詳細介紹5.6版本…

mysql 更新日的數據類型_[每日更新-MySQL基礎]5.常用的數據類型-整數和字符串

1. 數據類型在學習PHP的時候我們已經講過數據類型了&#xff0c;所謂數據類型就是數據的格式。每一種數據類型在計算機中存儲的方式會有差異&#xff0c;占用的存儲容量也有區別&#xff0c;所以選擇合適的數據類型可以節約我們的存儲成本&#xff0c;也方便我們的程序運行和…

Hello World with Spring 3 MVC

在2005年&#xff0c;我對Martin Fowler的這篇文章對Spring進行了介紹。從那時起&#xff0c;我就修改了許多IoC框架&#xff0c;包括Guice &#xff0c; PicoContainer &#xff0c; NanoContainer等。雖然我很喜歡與IoC一起工作&#xff0c;但我必須說Spring在過去的5年中&am…

ansible 安裝

1、簡介 ansible是新出現的自動化運維工具&#xff0c;基于Python開發&#xff0c;集合了眾多運維工具&#xff08;puppet、cfengine、chef、func、fabric&#xff09;的優點&#xff0c;實現了批量系統配置、批量程序部署、批量運行命令等功能。ansible是基于模塊工作的&#…

JS原型詳解

參考的別人家的博客http://www.cnblogs.com/ljchow/archive/2010/06/08/1753526.html ###JS原型####JS原型&#xff0c;就是原型對象&#xff0c;簡稱原型。不僅構造函數有&#xff0c;普通函數也有* 普通函數&#xff1a;javascript function puTong(){ }; alert(puTong.proto…

c# mysql 插入 和 查詢_C#對數據庫的操作(增刪改查)

1、【在web.config文件中配置】2、【連接字符串】private static readonly string StrCon ConfigurationManager.ConnectionStrings["sqlConnection"].ToString();3、【查詢數據方法】/// /// 查詢數據/// /// 查詢語句/// 參數/// public static DataTable QueryDa…