使用 STS 创建 Spring Integration 项目

工程 | Gunnar Hillert | 2012 年 4 月 9 日 | ...

仅仅几天前,SpringSource Tool Suite™ (STS) 2.9.1 发布了。除了许多新功能之外,它还为Spring Integration 用户提供了几项特别令人兴奋的功能。首先,最新的 STS 版本增加了对 Spring Integration 2.1 的支持,并改进了 Spring Integration 流的可视化能力。STS 现在支持所有最近添加的 Spring Integration 适配器,例如

此外,所有现有的 Spring Integration 适配器都已更新,以支持新的可视化元素。对 Spring Integration 用户来说,另一个令人惊喜的补充是 SpringSource Tool Suite 2.9.x 现在附带了对 Spring Integration 的模板支持。因此,在使用Spring Template Project Wizard创建新项目时,您现在可以在以下 3 个新的面向 Spring Integration 的模板之间进行选择:
  • Spring Integration 项目(独立) - 简单
  • Spring Integration 项目(独立) - 文件
  • Spring Integration 项目(War
简单模板创建一个基本的 Spring Integration 项目,该项目作为一个独立的 Java 应用程序运行,仅使用核心 Spring Integration 组件。为了说明文件轮询功能,文件模板使用了额外的组件来轮询文件目录以及路由这些文件。最后,War 模板允许用户轻松创建面向 Web 应用程序归档(WAR)部署并在 Servlet 容器(例如 Tomcat)中运行的基本 Spring Integration 项目。出于说明目的,War 模板使用了 Spring Integration 的Twitter 适配器

创建新的 Spring Integration 项目

要使用 STS Spring 模板启动新项目,请在主菜单中转到**文件**,然后是**新建**,最后是**Spring 模板项目**。然后将显示**模板选择屏幕**。

 

[caption id="attachment_10681" align="aligncenter" width="342" caption="模板选择屏幕"][/caption]

此屏幕提供所有可用的 Spring 模板的列表,包括之前提到的 3 个新的 Spring Integration 模板。如果在模板名称前面看到小箭头,则表示实际模板尚未下载。下载后,模板将缓存在您的计算机上,您无需再次下载模板文件,除非您按刷新按钮并且远程有新版本的模板可用。

让我们选择模板 Spring Integration Project (Standalone) - Simple,然后按“下一步”。如果模板尚未下载,您将看到以下弹出窗口:

一旦您继续并且模板已下载,您将看到项目设置屏幕。在那里,您需要提供项目名称和某些属性,以便轻松将新创建的项目部署到 Maven 存储库。

 

[caption id="attachment_10687" align="aligncenter" width="420" caption="项目设置屏幕"][/caption]

实际上,除了创建特定于 Eclipse 的项目文件之外,此模板向导还将生成一个项目 pom.xml 文件,该文件将使该项目在 STS 外部也易于使用(例如,用于将此项目作为您的持续集成流程的一部分,并与Jenkins 等工具一起构建)。因此,除了项目名称之外,您还需要提供 groupIdartifactIdversion 属性。最后,您还需要定义一个顶级(基本)包,您的相关源文件将位于该包下。

一旦您按“完成”,项目将被创建,并且应该在 STS 包资源管理器窗口的左侧列出。此时,您现在拥有一个功能齐全的 Spring Integration 项目。

运行项目

在您声明的基本包下,您会找到一个 Main 类,它允许您从命令行执行 Spring Integration 应用程序。在 STS 中,您可以通过右键单击 Main 类,然后选择“运行方式” --> Java 应用程序来执行它。应用程序启动,您将看到以下控制台输出:

Console Output

 

除了使用 STS 之外,您还可以使用Maven 从命令行非常简单地启动项目。只需转到项目目录并执行:

$ mvn clean package exec:java

此命令将清除target构建目录,编译并打包应用程序,并使用Exec Maven Plugin 执行应用程序。应用程序将像在 STS 中一样启动。按“q”将退出应用程序。

Spring Integration 配置

此应用程序的作用是允许您通过命令行输入一些自由格式文本,然后将其转换为大写表示形式并打印到控制台。

为了实现这一点,正在使用 Spring Integration。但是,如果您查看引导 Spring 应用程序上下文的 Main 类的详细信息,您会注意到它没有引用 Spring Integration 本身。该 Main 类基本上所做的是从 Spring 应用程序上下文中检索“StringConversionService”接口的实例。然而,这个接口被一个 Spring Integration Gateway 用来捕获输入的字符串并将其转发到请求通道。

项目的应用程序上下文 XML 文件位于 META-INF/spring/integration 下。正如您所见,该应用程序由一个非常基本的 Spring Integration 流程组成。我们从一个简单的 Gateway 开始,该 Gateway 使用前面提到的 StringConversionService 接口。


<?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-2.1.xsd">

<int:gateway id="gateway"
  default-request-timeout="5000"
  default-reply-timeout="5000"
  default-request-channel="requestChannel"
  default-reply-channel="replyChannel"
  service-interface="org.springintegration.demo.service.StringConversionService">
    <int:method name="convertToUpperCase"/>
</int:gateway>

<int:service-activator id="serviceActivator"
                    input-channel="requestChannel"
                    output-channel="replyChannel"
                    expression="payload.toUpperCase()"/>

<int:channel id="replyChannel"/>
<int:channel id="requestChannel"/>

</beans>

定义了 2 个消息通道。第一个通道将包含输入字符串的消息路由到 service-activator。service activator 本身将使用 Spring 表达式语言 (SpEL) 将输入消息的 payload 转换为大写。通过回复通道,大写字符串会返回给调用者,并打印到命令行。

在实际场景中,Service Activator 最有可能引用另一个服务 bean 以执行一些非平凡的业务逻辑,例如:


…
<int:service-activator id="serviceActivator"
                    input-channel="requestChannel"
                    output-channel="replyChannel"
                    ref="businessService" 
                    method="myMethodToExecute"/>
…

此外,请注意,我们在本模板中使用 Service Activator 来说明执行其他基于 Java 的业务服务。如果您的目标是纯粹转换 Spring Integration 消息 Payload,也请考虑使用Transformer,它在语义上可能更合适。

这是一个非常简单的用例,但它为您实现自己的 Spring Integration 组件提供了一个很好的起点。我们希望这些模板将大大降低学习和体验在您自己的项目中使用 Spring Integration 优势的门槛。如果您有任何疑问,我们很乐意听取您的意见。对于您可能有的任何疑问,请访问 Spring Integration 论坛:forum.springsource.org。有关 Spring Integration 的一般信息,请访问我们的项目网站:http://www.springintegration.org/

资源

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

查看 Spring 社区所有即将举行的活动。

查看所有