这是有关Spring Integration系列的第二篇文章。 本文以我们介绍Spring Integration的第一篇文章为基础。

上下文设置

在第一篇文章中,我们创建了一个简单的Java应用程序,其中

  1. 通过频道发送了一条消息,
  2. 它被服务(即POJO)拦截并进行了修改。
  3. 然后通过另一个渠道发送
  4. 从通道读取并显示修改后的消息。

但是,在执行此操作时(请记住,我们只是在此处介绍概念),我们在应用程序中编写了一些特定于Spring的代码,即测试类。 在本文中,我们将解决这个问题,并使我们的应用程序代码与Spring Integration api尽可能隔离。

这是通过Spring Integration称为gateways来完成的 。 存在网关的唯一目的是将消息传递相关的“管道”代码从“业务”代码中抽象出来。 业务逻辑可能实际上并不在乎是通过通道发送消息还是通过进行SOAP调用来实现功能。 到目前为止,这种抽象虽然合乎逻辑且合乎需要,但并非十分实用。

此时可能值得快速浏览一下《 Spring Integration参考手册》 。 但是,如果您刚刚开始使用Spring Integration,那么暂时最好阅读本文。 我建议您先洗手,然后再返回参考手册,该手册非常好,但也非常详尽,因此对于初学者来说可能不胜枚举。

网关可以是带有批注的POJO(这很方便,但在我看来却超出了整个目的)或具有XML配置(如果未经检查,它很快会变成任何体面大小的应用程序的噩梦)。 归根结底,这确实是您的选择,但是我喜欢走XML路线。 两种样式的配置选项在参考实现的本节中详细介绍。

Spring与网关的集成

因此,让我们为HelloWorld服务创建另一个带有网关抛出的测试(有关更多上下文,请参阅本系列的第一篇文章 )。 让我们从测试的Spring配置开始。
文件:src / test / resources / org / academy / integration / HelloWorld1Test-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' /><int:gateway service-interface='org.academy.integration.Greetings'default-request-channel='inputChannel' default-reply-channel='outputChannel'></int:gateway></beans>

在这种情况下,所有不同之处在于我们添加了一个网关。 这是一个称为org.academy.integration.Greetings的接口。 它与“ inputChannel”和“ outputChannel”交互,分别发送和读取消息。 让我们编写界面。

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

package org.academy.integration;public interface Greetings {public void send(String message);public String receive();}

然后,我们添加此接口的实现。 等待。 没有实现。 而且我们不需要任何实现。 Spring使用一种名为GatewayProxyFactoryBean的东西向该网关注入一些基本代码,从而使它可以读取基于字符串的简单消息,而无需我们做任何事情。 那就对了。 没事

注–假设您不是在使用Spring Integration框架只是推敲字符串, 就需要为大多数生产方案添加更多代码 。 因此,不要习惯免费午餐。 但是,尽管它在这里,让我们深入研究。

现在,让我们使用网关编写一个新的测试类(并且完全不与通道和消息进行交互)。
文件:/src/test/java/org/academy/integration/HelloWorld1Test.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.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class HelloWorld1Test {private final static Logger logger = LoggerFactory.getLogger(HelloWorld1Test.class);@AutowiredGreetings greetings;@Testpublic void test() {greetings.send('World');assertEquals(greetings.receive(), 'Hello World');logger.debug('Spring Integration with gateways.');}}

现在我们的测试班要干净得多。 它根本不了解频道,消息或与Spring Integration相关的任何信息。 它只知道一个问候实例(通过.send()方法向其提供一些数据),并通过.receive()方法获取修改后的数据。 因此, 业务逻辑忽略了管道逻辑 ,从而使代码更加简洁。

现在,只需键入“ mvn -e clean install”(或使用m2e插件),您就应该能够运行单元测试并确认给定的字符串“ World”,HelloWorld服务的确在整个通道安排中确实返回了“ Hello World”和消息。

同样,可选但我强烈建议您运行“ mvn -e全新安装站点”。 假设您已正确配置了一些代码覆盖率工具(在我的情况下为cobertura),将为您提供一个不错HTML报告,其中显示了代码覆盖率。 在这种情况下,它将是100%。 我已经写了一系列关于代码质量的文章 ,详细介绍了该主题,但是总而言之,确保我使用和推荐使用的任何编码实践/框架都符合一些基本的代码质量标准对我来说非常重要。 。 能够进行单元测试和测量是我所做的这样一项基本检查。 毋庸置疑,一般来说,Spring(包括Spring集成)会通过带有鲜艳色彩的检查。

结论

本文就是这样。 快乐的编码。

建议进一步阅读...

以下是本系列早期文章的链接:

  1. Hello World with Spring 3 MVC
  2. 使用Spring 3 MVC处理表单
  3. 使用Spring 3进行单元测试和记录
  4. 使用Spring 3 MVC处理表单验证
  5. 引入Spring集成

这些是我可以推荐的出色材料:

  1. Spring Integration入门
  2. Spring Integration的示例代码
  3. Spring集成–第1节– Hello World
  4. Spring集成–第2节–更多世界

参考: Tech for Enterprise博客上我们JCG合作伙伴 Partho的Spring与Gatways的集成 。

翻译自: https://www.javacodegeeks.com/2012/08/spring-integration-with-gateways.html

Spring与网关的集成相关推荐

  1. 【java_wxid项目】【第十六章】【Spring Cloud Alibaba Sentinel集成】

    主项目链接:https://gitee.com/java_wxid/java_wxid 项目架构及博文总结: 点击:[使用Spring Boot快速构建应用] 点击:[使用Spring Cloud O ...

  2. 【java_wxid项目】【第七章】【Spring Cloud Security Oauth2集成】

    主项目链接:https://gitee.com/java_wxid/java_wxid 项目架构及博文总结: 点击:[使用Spring Boot快速构建应用] 点击:[使用Spring Cloud O ...

  3. Spring Boot 极简集成 Shiro

    点击关注公众号,Java干货及时送达 1. 前言 Apache Shiro是一个功能强大且易于使用的Java安全框架,提供了认证,授权,加密,和会话管理. Shiro有三大核心组件: Subject: ...

  4. 搭建eclipse版的ssm+maven+tk.mybatis+redis及mybatis+spring多数据源配置集成的demo

    前言:我这里搭建好eclipse版的ssm+maven+tk.mybatis+redis及mybatis+spring多数据源配置集成的demo.新手快速上手直接看demo. 最后处提供完整高质量de ...

  5. Spring+SpringMVC+Mybatis框架集成搭建教程

    一.背景 最近有很多同学由于没有过SSM(Spring+SpringMvc+Mybatis , 以下简称SSM)框架的搭建的经历,所以在自己搭建SSM框架集成的时候,出现了这样或者那样的问题,很是苦恼 ...

  6. Spring Boot最新版集成邮件发送功能大全

    Spring Boot最新版集成邮件发送功能大全 前言 一.开启SMTP服务并获取授权码 二.创建Spring Boot项目 1.配置邮箱基本信息: 2.简单邮件发送: 3.发送带附件的邮件: 5.使 ...

  7. Spring MVC Hibernate MySQL集成CRUD示例教程

    Spring MVC Hibernate MySQL集成CRUD示例教程 我们在上一篇教程中学习了如何集成Spring和Hibernate.今天,我们将继续前进,并将Spring MVC和Hibern ...

  8. spring boot、mybatis集成druid数据库连接池,实现mysql cluster HA负载均衡访问

    spring boot.mybatis集成druid数据库连接池,实现mysql cluster HA负载均衡访问 1.原理实现介绍 本质来说使用连接池是为了节省创建.关闭数据库连接的资源消耗,从而提 ...

  9. Spring的junit4测试集成

    Spring的junit测试集成 Spring提供spring-test-4.2.4.RELEASE.jar 可以整合junit. 优势:可以简化测试代码(不需要手动创建上下文,即手动创建spring ...

最新文章

  1. plot参数详解python_30行Python代码实现3D数据可视化
  2. iOS:分页控件UIPageControl的使用
  3. Linux CentOS 7 防火墙/端口设置
  4. 强制关机对电脑的影响_电脑强制关机,对电脑有影响吗?你被伪科普骗了多久?...
  5. apache camel_Apache Camel Intellij IDEA插件的工作已开始
  6. 一步步实现SDDC-逻辑交换与逻辑路由
  7. 软考程序员2017下半年真题含答案解析
  8. linux终端 快捷键
  9. 超实用的doc 转 docx
  10. 阿米巴经营会计报表复习
  11. 2017-2018 ACM-ICPC, Asia Daejeon Regional Contest 补题
  12. 聚焦智改数转,长沙博世“灯塔工厂”出圈史
  13. [PC] 微软账号连接不上
  14. JAVA SE File下面的方法
  15. 这才是数字孪生污水处理厂该有的样子 | 智慧水务
  16. 2018年腾讯校招和小米校招本人所做笔试题——前端Web开发工程师方向
  17. 无线网卡的4种工作模式
  18. Win10不支持承载网络的解决方法
  19. Bugtags 远程配置功能介绍
  20. 浅论资产定价的两大基石 (I)

热门文章

  1. ReviewForJob(3)表、栈和队列
  2. MVC如何添加Model
  3. 静态资源Css基础语法
  4. apigee 安装_APIGEE:用于API代理的CI / CD管道
  5. 来的多可选_您的框架有多可扩展性?
  6. ios 静音模式_静音设计模式
  7. hibernate 别名_Hibernate:在sqlRestriction上使用联接表别名
  8. 愚弄dnn_不要被泛型和向后兼容性所愚弄。 使用泛型类型
  9. java minor gc_Java Minor发布计划再次进行了调整
  10. java 面试指南_Java面试参考指南–第1部分