Spring Integration 3.0.2 和 4.0 里程碑版本 4 发布

发行版 | Artem Bilan | 2014年3月31日 | ...

我们很高兴地宣布 Spring Integration 4.0 的最终里程碑版本和 3.0.x 系列的下一个维护版本。3.0.2.RELEASE 包含少量针对 3.0 版本 的重要修复。我们鼓励 Spring Integration 3.0 用户尽快升级到此版本。请参阅 3.0.2 发行说明项目页面 以了解更多信息。

Spring Integration 4.0 是该框架的下一代版本,它现在基于新的 Spring Framework 4.0 消息模块。请参阅 迁移指南,了解有关将应用程序从 Spring Integration 3.0 迁移到 4.0 的信息。

Spring Integration 4.0 发行的另一个主要目标是为框架添加改进的 Java 和注释配置功能;让我们重点介绍其中一些功能……

@EnableIntegration

Spring Integration 提供许多环境和内置 bean 来支持运行时 企业集成模式 和消息基础设施。使用 XML 配置,它们会根据需要由 NamespaceHandler 自动声明。在纯 Java 配置中,没有命名空间处理程序,需要另一种机制来设置集成环境。为此目的添加了 @EnableIntegration 注释。它类似于 spring-webmvc 中的 @EnableWebMvc 或 Spring Data 中的 @Enable*Repositories 注释,并且应该与至少一个类上的 @Configuration 注释一起放置。

注意:ApplicationContext 中只需要一个 @EnableIntegration 注释。有了此注释,您可以开始从 Spring @Configuration 类配置集成流程。

@Configuration
@EnableIntegration
public static class MyConfiguration {

    @Bean
    public MessageChannel fileWritingChannel() {
         return new DirectChannel();
    }

    @Bean
    public FileWritingMessageHandler fileWritingMessageHandler() {
        return new FileWritingMessageHandler(this.outputDir);
    }

   @Bean
    public ConsumerEndpointFactoryBean fileWritingEndpoint() {
        ConsumerEndpointFactoryBean endpoint = new ConsumerEndpointFactoryBean();
        endpoint.setHandler(this.fileWritingMessageHandler());
        endpoint.setInputChannel(this.fileWritingChannel());
        return endpoint;
    }

}

当然,使用组件扫描,可以使用现有的 Spring Integration 配置注释(@MessageEndpoint@ServiceActivator@Router@Filter 等)来定义流程。请参阅本文后面关于 Spring Boot 应用程序的示例。

@MessagingGateway

另一个有用且重要的消息组件是 Messaging Gateway。使用 XML,我们使用 <int:gateway/> 组件将接口的实现提供为消息流的网关。使用 Spring Integration 4.0,您可以通过使用新引入的 @MessagingGateway 注释来避免 XML 配置。此注释提供与 <int:gateway/> 元素相同的属性,并放置在网关的服务接口上。

@MessagingGateway(defaultRequestChannel = "gatewayChannel",
     defaultHeaders = @GatewayHeader(name = "foo", value = "FOO"))
public interface MyGateway {

	@Gateway(headers = @GatewayHeader(name = "calledMethod",
                                      expression = "#gatewayMethod.name"))
	String echo(String payload);

}

重要提示:由于此组件不会自动对 Spring 容器可见,并且默认的 @ComponentScan 不适用于接口,因此引入了另一个新注释 @IntegrationComponentScan。此注释类似于 Spring Data 中的 @Enable*Repositories,并提供选项来配置 basePackages 属性以扫描集成组件,并且应与 @Configuration 一起放置。

Spring Boot @EnableAutoConfiguration

利用 SpringFactoriesLoader 机制,Spring Integration 基础设施也可通过 Spring Boot @EnableAutoConfiguration 注释获得。只需将 Spring Integration 4.0 添加到类路径并使用 Spring Boot 自动配置功能。

这是一个非常简单的 Spring Boot 应用程序

@EnableAutoConfiguration  // enables integration infrastructure
@IntegrationComponentScan // looks for gateways
@ComponentScan			  // looks for Spring Beans
public class Integration {

	public static void main(String[] args) throws Exception {
		ConfigurableApplicationContext ctx = SpringApplication.run(Integration.class, args);
		String reply = ctx.getBean(GW.class).sendAndReceive("foo");
		System.out.println(reply);
		ctx.close();
	}

	@MessagingGateway(defaultRequestChannel="in")
	public interface GW {

		String sendAndReceive(String payload);
	}

	@MessageEndpoint
	public static class MyService {

		@ServiceActivator(inputChannel="in")
		public String foo(String payload) {
			return payload.toUpperCase();
		}
	}

}

其他更改

此外,还引入了其他有用的 Java 和注释配置组件:@EnableMessageHistory@EnablePublisher@EnableIntegrationMBeanExport@GlobalChannelInterceptor@IntegrationConverter 等。有关新功能和更改的信息,请参阅 Spring Integration 4.0 里程碑版本 4 的 新增功能发行说明

有关 Spring Integration 4.0 中所有更改的完整列表,请参阅每个里程碑的发行说明。

(第一个里程碑只是重构了 3.0 代码以使用 spring-messaging 类)。

4.0.0.M4 版本现已在 Spring 里程碑存储库中提供。

我们期待收到您的评论和反馈:Spring 论坛StackOverflow(spring-integration 标签)、Spring JIRA

预告

Spring Integration Java DSL 即将推出!

获取 Spring 电子报

通过 Spring 电子报保持联系

订阅

领先一步

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

了解更多

获取支持

Tanzu Spring在一个简单的订阅中提供对 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举行的活动

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

查看全部