日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring集成–从头开始应用程序,第1部分

發布時間:2023/12/3 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring集成–从头开始应用程序,第1部分 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

開始之前

在本教程中,您將學習什么是Spring Integration ,如何使用它以及有助于解決哪些問題。 我們將從頭開始構建一個示例應用程序,并演示Spring Integration的一些核心組件。 如果您不熟悉Spring,請查看我編寫的另一本有關Spring的教程- 我們可以一起做一些Spring嗎? 還要注意,您不需要任何特殊的工具,但是您可以使用IntelliJ IDEA或Spring Tool Suite來獲得構建Spring Integration應用程序的最佳體驗(使用STS可以獲得一些精美的圖表)。 您可以按照本教程逐步操作并自己從頭開始創建應用程序,也可以繼續從github獲取代碼:
此處下載資源: https : //github.com/vrto/spring-integration-invoices

無論您喜歡哪種方式,都該開始了!

發票處理申請書-功能說明

想象一下,您在某家公司工作,該公司會定期從各種承包商那里收到大量發票。 我們將建立一個能夠接收發票,過濾掉相關發票,創建付款(本地或國外)并將其發送到某些銀行服務的系統。 即使該系統非常幼稚,當然也不適合企業使用,我們仍將嘗試在頭腦中以良好的可伸縮性,靈活性和分離的設計來構建它。

在繼續之前,您必須意識到一件事:Spring Integration是(不僅但主要是)關于消息傳遞的 。 Spring Integration基本上是嵌入式企業服務總線 ,可讓您無縫地將業務邏輯連接到消息傳遞通道。 可以通過編程方式(通過Spring Integration API)或自動(通過框架本身–更高級別的解耦)來處理消息。 消息是跨渠道傳播的東西。 消息具有標題和有效負載 –在我們的示例中,它們將是實際相關的內容(域類)。 讓我們看一下下面的圖片,它是系統的摘要,并遍歷了重要的部分:

在圖片上,您可以看到一個集成圖,該圖說明了我們的消息傳遞結構和系統的核心組件-它們用紅色數字標記。 讓我們來看一下(稍后我們將更詳細地介紹每個組件):

  • 發票網關 –這是我們放置新發票的地方,以便它們可以進入消息傳遞層
  • 拆分器 -該系統旨在接受發票的集合,但是我們將需要單獨處理每個發票。 更具體地說,具有“收集”類型有效負載的消息將被拆分為多個消息,其中每個消息將具有單獨的發票作為有效負載。
  • 篩選器 -我們的系統旨在僅自動處理開具少于$ 10,000的那些發票
  • 路由器 -有些發票使用IBAN帳號,我們有兩個不同的帳戶-一個用于本地交易,一個用于國外交易。 路由器組件的工作是將帶有發票的消息發送到正確的通道-無論是本地發票還是國外發票。
  • 變形金剛 –當我們在系統中接受發票時,我們的銀行API可以與其他類型一起使用–付款。 轉換器組件的工作是根據提供的邏輯獲取一些消息并將其轉換為另一條消息。 我們希望將原始消息(發票)的有效負載轉換為新的有效負載-付款。
  • Banking Service Activator –處理發票并生成一些實際付款后,我們準備與外部銀行系統進行對話。 我們已經公開了此類系統的服務,當攜帶付款的消息進入正確的(銀行)渠道時,我們想激活一些邏輯–將付款傳遞給銀行,然后讓銀行進行進一步處理。
  • 創建項目

    到目前為止,您應該對系統的功能以及其結構有一個較高的概述。 在開始編碼之前,您將需要一個實際的Maven項目,并設置結構和所需的依賴關系。 如果您熟悉Maven,請參見下面的pom.xml文件,否則,如果您想節省一些時間,歡迎使用我為您創建的項目模板: 下載Maven項目模板 。

    <?xml version='1.0' encoding='UTF-8'?> <project xmlns='http://maven.apache.org/POM/4.0.0'xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd'><modelVersion>4.0.0</modelVersion><groupId>spring-integration-invoices</groupId><artifactId>spring-integration-invoices</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>3.2.1.RELEASE</version></dependency><dependency><groupId>org.springframework.integration</groupId><artifactId>spring-integration-core</artifactId><version>2.2.1.RELEASE</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.16</version></dependency><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>13.0.1</version></dependency><dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>6.5.2</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.7</source><target>1.7</target></configuration></plugin></plugins></build></project>

    現在,讓我們更詳細地介紹系統的六個主要組件,并獲得實際的代碼。

    1.發票網關

    首先,讓我們看一下Invoice的代碼-這將是系統中的核心類之一。 我將使用com.vrtoonjava軟件包作為根軟件包,使用發票和銀行業務作為子軟件包:

    package com.vrtoonjava.invoices;import com.google.common.base.Objects;import java.math.BigDecimal;public class Invoice {private final String iban;private final String address;private final String account;private final BigDecimal dollars;public Invoice(String iban, String address, String account, BigDecimal dollars) {this.iban = iban;this.address = address;this.account = account;this.dollars = dollars;}public boolean isForeign() {return null != iban && !iban.isEmpty();}public String getAddress() {return address;}public String getAccount() {return account;}public BigDecimal getDollars() {return dollars;}public String getIban() {return iban;}@Overridepublic String toString() {return Objects.toStringHelper(this).add('iban', iban).add('address', address).add('account', account).add('dollars', dollars).toString();}}

    想象一下,我們從另一個系統(數據庫,Web服務或其他系統)獲取發票,但是我們不想將此部分耦合到集成層。 我們將為此使用網關組件。 Gateway引入了一個協議 ,該協議將客戶端代碼與集成層分離(在我們的案例中為Spring Integration依賴項)。 讓我們看一下InvoiceCollectorGateway的代碼:

    package com.vrtoonjava.invoices;import java.util.Collection;/*** Defines a contract that decouples client from the Spring Integration framework.*/ public interface InvoiceCollectorGateway {void collectInvoices(Collection<Invoice> invoices);}

    現在,要實際使用Spring Integration,我們需要創建一個標準的Spring配置文件并使用Spring Integration名稱空間。 首先,這是invoices-int-schema.xml文件。 將其放入src / main / resources 。 請注意,我們已經定義了一個logging-channel-adapter ,這是一個特殊的通道,我們將從記錄器發送消息。 我們還使用竊聽 –您可以將其視為一種全局攔截器,它將向日志記錄器通道發送與日志記錄相關的消息。

    <?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:int = 'http://www.springframework.org/schema/integration'xsi:schemaLocation = 'http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd'><!-- intercept and log every message --><int:logging-channel-adapter id='logger' level='DEBUG' /><int:wire-tap channel = 'logger' /> </beans>

    現在回到我們的網關。 我們已經定義了一個網關接口–這是客戶端將使用的依賴項。 當客戶端調用collectInvoices方法時,網關將向newInvoicesChannel通道發送一條新消息(包含List負載)。 這使客戶端與消息傳遞工具脫鉤,但是讓我們將結果放置到實際的消息傳遞通道中。 要配置網關,請將以下代碼添加到集成模式配置中:

    <int:channel id = 'newInvoicesChannel' /><int:gateway id='invoicesGateway'service-interface='com.vrtoonjava.invoices.InvoiceCollectorGateway'><int:method name='collectInvoices' request-channel='newInvoicesChannel' /> </int:gateway>

    2.發票分割器

    從網關,我們正在向包含發票集合的系統發送一條大消息,換句話說,消息具有“收集”類型的有效負載。 當我們要單獨處理發票時,我們將從newInvoicesChannel獲得結果并使用分離器組件,該組件將創建多條消息。 這些新消息中的每一個將具有發票類型的有效負載。 然后,我們將消息放置到新渠道– singleInvoicesChannel 。 我們將使用Spring Integration提供的默認拆分器(默認情況下,Spring Integration使用DefaultMessageSplitter來實現我們想要的功能)。 這是我們定義分離器的方式:

    <int:splitterinput-channel='newInvoicesChannel'output-channel='singleInvoicesChannel' /><int:channel id = 'singleInvoicesChannel' />

    3.過濾一些發票

    我們系統的業務用例要求我們僅自動處理發出少于$ 10,000的發票。 為此,我們將介紹一個過濾器組件。 我們將從singleInvoicesChannel抓取消息,對它們應用過濾邏輯,然后將匹配的結果寫入新的filterInvoicesChannel通道。 首先,讓我們創建一個標準的Java類,其中將包含針對單個發票的過濾邏輯。 請注意,我們使用@Component注釋(這使其成為標準的Spring bean),并使用@Filter注釋注釋過濾方法-這將告訴Spring Integration使用此方法過濾邏輯:

    package com.vrtoonjava.invoices;import org.springframework.integration.annotation.Filter; import org.springframework.stereotype.Component;@Component public class InvoiceFilter {public static final int LOW_ENOUGH_THRESHOLD = 10_000;@Filterpublic boolean accept(Invoice invoice) {boolean lowEnough = invoice.getDollars().intValue() < LOW_ENOUGH_THRESHOLD;System.out.println('Amount of $' + invoice.getDollars()+ (lowEnough ? ' can' : ' can not') + ' be automatically processed by system');return lowEnough;}}

    請注意,這是一個標準的POJO,我們可以輕松對其進行單元測試 ! 就像我之前說過的那樣,Spring Integration并未將我們與其消息傳遞工具緊密耦合。 為了簡潔起見,我不在本教程中粘貼單元測試–但是,如果您有興趣, 請繼續下載github項目并親自查看測試 。

    讓我們為消息傳遞層指定輸入/輸出通道,并將過濾器掛入。將以下代碼添加到集成模式配置中:

    <int:filterinput-channel='singleInvoicesChannel'output-channel='filteredInvoicesChannel'ref='invoiceFilter' /><int:channel id = 'filteredInvoicesChannel' />

    4.路由發票

    到目前為止,我們已經拆分并過濾了一些發票。 現在是時候更仔細地檢查每個發票的內容并決定是從當前國家(本地)還是從另一個國家(外國)發行的發票了。 為此,我們可以像以前一樣處理并將自定義類用于路由邏輯。 我們(出于演示目的)現在將采用另一種方法-我們將使用Spring Expression Language(SpEL)來完全聲明性地使用和處理路由。 還記得發票類上的isForeign方法嗎? 我們可以在路由器聲明中使用SpEL直接調用它(通過使用selector-expression屬性)! 路由器將查看有效負載,評估它是國外發票還是本地發票,并將其轉發到相應的渠道:

    <int:recipient-list-router input-channel='filteredInvoicesChannel'><int:recipient channel = 'foreignTransactions' selector-expression='payload.foreign' /><int:recipient channel = 'localTransactions' selector-expression='!payload.foreign' /> </int:recipient-list-router><int:channel id = 'foreignTransactions' /> <int:channel id = 'localTransactions' />

    我們將在本教程的第二部分中繼續開發此應用程序。

    參考: Spring Integration –從頭開始的應用程序,來自 vrtoonjava博客的JCG合作伙伴 Michal Vrtiak的第1部分 。

    翻譯自: https://www.javacodegeeks.com/2013/03/spring-integration-application-from-scratch-part-1.html

    總結

    以上是生活随笔為你收集整理的Spring集成–从头开始应用程序,第1部分的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。