使用Java DSL配置Spring Integration

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2015/10/10/spring-integration-java-dsl/

Spring Integration是Spring下的一个项目,主要为了扩展Spring现有的模型已支持Enterprise Integration Patterns。

Spring Integration还和其他项目结合紧密,比如Spring XD就可以使用其作为输入来源。

Spring Integration可以完全依赖于xml工作,即意味着一个核心系统完成后,可以只单单更改xml配置本身来完成相关功能变更。

 

但是xml配置也有不便利的地方,特别是在项目开发初期,对于开发人员而言,xml的表达能力自然不如java,在需要功能扩展的时候也必须需要java代码才行。

而Spring的一个新的子项目spring-integration-java-dsl就可以实现使用java dsl来配置相关功能。

以最简单的消费atom源为例,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:int="http://www.springframework.org/schema/integration"
xmlns:file="http://www.springframework.org/schema/integration/file"
xmlns:feed="http://www.springframework.org/schema/integration/feed"
xsi:schemaLocation="http://www.springframework.org/schema/integration/feed http://www.springframework.org/schema/integration/feed/spring-integration-feed.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration/file http://www.springframework.org/schema/integration/file/spring-integration-file.xsd
http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd">
<feed:inbound-channel-adapter id="news" url="https://spring.io/blog.atom">
<int:poller fixed-rate="5000"/>
</feed:inbound-channel-adapter>
<int:transformer
input-channel="news"
expression="payload.title + ' @ ' + payload.link + '#{systemProperties['line.separator']}'"
output-channel="file"/>
<file:outbound-channel-adapter id="file"
mode="APPEND"
charset="UTF-8"
directory="/tmp/si"
filename-generator-expression="'SpringBlog'"/>
</beans>

这个例子由三个部分组成,首先是输入,定时获取atom源的数据,第二是获取标题和链接,最后是输出到文件。

这个三个组件都是Spring Integration自带的,分别是FeedEntryMessageSource,FileWritingMessageHandler,转换部分使用的是SpEL表达式。

如果使用java dsl,来看看同样的功能如何实现。

@Bean
public IntegrationFlowmyFlow()throws MalformedURLException {
return IntegrationFlows.from(new FeedEntryMessageSource(new URL("https://spring.io/blog.atom"),""), c ->
c.poller(Pollers.fixedRate(5000)))
.channel(this.inputChannel())
.transform("payload.title + ' @ ' + payload.link")
.handle(new FileWritingMessageHandler(new File("tmp/si")))
.get();
}

代码简洁了不少,而且可读性的提升也是很大的,特别是对于刚刚接触Spring Integration的人来说。

这个子项目目前版本是1.0.2.RELEASE,还属于起步状态,但是所有组件和模型都可以使用了。

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2015/10/10/spring-integration-java-dsl/

发表评论