Spring Integration Java DSL 1.0 里程碑版本 3 发布

发布 | Artem Bilan | 2014年9月7日 | ...

我们很高兴地宣布 Spring Integration 1.0 里程碑版本 3 的 Java DSL 已发布。请使用 Maven 或 Gradle 的 里程碑版本仓库,下载 发行版归档文件,或查看项目的 主页 以获取更多信息。

自上次 里程碑版本 2 以来,此里程碑版本中包含了一些新功能和进一步改进,以及许多错误修复,GA 版本预计将于 10 月底发布。

首先感谢所有对 Spring Integration 扩展感兴趣的人,提供反馈,分享他们的想法,甚至做出贡献。

以下是主要更改的摘要

Spring Integration 4.1

当前里程碑版本与 Spring Integration 4.1 以及 Spring Framework 4.1 兼容。

更改包括

  • Spring Integration 4.1 提供了通道名称延迟解析

这允许 DSL IntegrationFlow 定义仅基于通道名称,并避免需要从一个流到另一个流使用@DependsOn 的解决方法;

  • Spring Framework 4.1 中包含了许多消息传递性能改进,当 Spring Integration

(以及它的 DSL) 基于 Spring Messaging 模块时;

.io/spring/docs/current/spring-framework-reference/html/expressions.html#expressions-spel-compilation)。这对 Spring Integration 非常有用,Spring Integration 在运行时广泛使用 SpEL。您可以使用spring.expression.compiler.mode 系统属性(值为IMMEDIATEMIXED)启用 SpEL 编译器。

当然,仍然保持与 Spring Integration 4.0 的兼容性。

IntegrationFlow Lambda

IntegrationFlow Bean 定义现在也可以表示为Lambda,以简化 DSL 的使用

@Bean
public IntegrationFlow lambdaFlow() {
    return f -> f.filter("World"::equals)
                 .transform("Hello "::concat)
                 .handle(System.out::println);
}

实际上,我们只是将IntegrationFlow 变成一个带有单个方法define(IntegrationFlowDefinition<?> flow) 的函数式接口,并且IntegrationFlowBeanPostProcessor 只是将该“伪”Bean 转换为基于隐式IntegrationFlowBuilder 的真实StandardIntegrationFlow。唯一的限制是,这种定义基于一个具有lambdaFlow.input Bean 名称的隐式DirectChannel

协议特定适配器

在此里程碑版本中,引入了几个新的协议特定的命名空间工厂Files(S)FtpMail。一些关于它们用法的简单示例

@Autowired
private DefaultFtpSessionFactory ftpSessionFactory;

@Bean
public IntegrationFlow ftpInboundFlow() {
     return IntegrationFlows
               .from(Ftp.inboundAdapter(this.ftpSessionFactory)
                        .preserveTimestamp(true)
                        .remoteDirectory("ftpSource")
                        .regexFilter(".*\\.txt$")
                        .localFilenameGeneratorExpression("#this.toUpperCase() + '.a'")
                        .localDirectory(new File("tmp")),
                      e -> e.id("ftpInboundAdapter"))
               .channel(MessageChannels.queue("ftpInboundResultChannel"))
               .get();
}

@Bean
public IntegrationFlow tailFlow() {
	return IntegrationFlows
			.from(Files.tailAdapter(new File(tmpDir, "TailTest"))
					.delay(500)
					.end(false))
			.channel(MessageChannels.queue("tailChannel"))
			.get();
}

@Bean
public IntegrationFlow imapIdleFlow() throws AddressException {
    return IntegrationFlows
            .from(Mail.imapIdleAdapter("imap://user:[email protected]:993/INBOX")
                    .searchTermStrategy((f, l) -> 
                    		new AndTerm(new FromTerm(new InternetAddress("bar@baz")), 
                    					new FlagTerm(new Flags(Flags.Flag.SEEN), false)))
                    .javaMailProperties(p -> p
                            .put("mail.debug", "true")
                            .put("mail.imap.connectionpoolsize", "5"))
                    .shouldReconnectAutomatically(true))
            .enrichHeaders(s -> s.headerExpressions(h -> h
                            .put(MailHeaders.SUBJECT, "payload.subject")
                            .put(MailHeaders.FROM, "payload.from[0].toString()")))
            .channel(MessageChannels.queue("imapIdleChannel"))
            .get();
}

支持添加

正如您在最后一个IMAP 示例中注意到的,.javaMailProperties().enrichHeaders() 具有流畅的语法,可以将PropertiesMap<String, String> 指定为内联对象。不幸的是,Java 没有为这些简单类提供Builder API,因此我们为您做到这一点,并提供函数式接口以从 Lambda 构建PropertiesMap。例如,Mail.headers() 提供了一个MailHeadersBuilder - MapBuilder 的扩展,它也可以在.enrichHeaders() 中使用

@Bean
public IntegrationFlow sendMailFlow() {
	return f -> f.enrichHeaders(Mail.headers().subject("foo").from("foo@bar").to("bar@baz"))
				 .handle(Mail.outboundAdapter("smtp.gmail.com")
							.credentials("user", "pw")
							.protocol("smtp")));
}

当然,这等同于 XML 配置中的<int-mail:header-enricher>

总结

您可以从它们的 源代码 获取有关这些类和现有类的更多信息。

我们期待您尽快提供您的意见和反馈(StackOverflowspring-integration 标签)、Spring JIRAGitHub),并在我们发布 GA 版本之前报告您发现的问题(大约几个月后)。

SpringOne 2GX 2014

明天将在 SpringOne 上介绍其中一些主题。请参加 [Gary Russell 的会议] (https://2014.event.springone2gx.com/schedule/sessions/spring_integration_java_configuration_and_more.html),以了解有关这些主题以及过去 12 个月添加的其他 Spring Integration 改进的更多信息。

获取 Spring 新闻通讯

与 Spring 新闻通讯保持联系

订阅

领先一步

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

了解更多

获得支持

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

了解更多

即将举行的活动

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

查看全部