2.1 和 2.2 之间的变化
新组件
2.2 版本增加了一些新组件。
RedisStore
入站和出站通道适配器
Spring Integration 现在拥有 RedisStore
入站和出站通道适配器,允许您将 Message
有效负载写入 Redis 集合以及从中读取。
有关更多信息,请参阅 RedisStore 出站通道适配器 和 Redis Store 入站通道适配器。
MongoDB 入站和出站通道适配器
Spring Integration 现在拥有 MongoDB 入站和出站通道适配器,允许您将 Message
有效负载写入 MongoDB 文档存储以及从中读取。
有关更多信息,请参阅 MongoDB 出站通道适配器 和 MongoDB 入站通道适配器。
一般性变更
本节描述了从 2.1 版本到 2.2 版本的一般性变更。
为端点添加行为
向轮询器添加 <advice-chain/>
的功能已经存在一段时间了。
但是,此行为会影响整个集成流。
它没有解决为单个端点添加(例如)重试的功能。
2.2 版本向许多端点引入了 <request-handler-advice-chain/>
。
此外,我们为此目的添加了三个标准建议类:
-
MessageHandlerRetryAdvice
-
MessageHandlerCircuitBreakerAdvice
-
ExpressionEvaluatingMessageHandlerAdvice
有关更多信息,请参阅 为端点添加行为。
事务同步和伪事务
轮询器现在可以参与 Spring 的事务同步功能。 这允许同步诸如入站通道适配器重命名文件等操作,具体取决于事务是提交还是回滚。
此外,当没有“真实
”事务存在时,您可以通过 PseudoTransactionManager
启用这些功能。
有关更多信息,请参阅 事务同步。
文件适配器:改进了文件覆盖和追加处理
当使用文件出站通道适配器或文件出站网关时,您可以使用新的 mode
属性。
在 Spring Integration 2.2 之前,目标文件如果存在则会被替换。
现在您可以指定以下选项:
-
REPLACE
(默认) -
APPEND
-
FAIL
-
IGNORE
有关更多信息,请参阅 处理现有目标文件。
Spring-AMQP 1.1
Spring Integration 现在使用 Spring AMQP 1.1。 这使得在 Spring Integration 应用程序中可以使用多种功能,包括:
-
出站网关的固定回复队列
-
HA(镜像)队列
-
发布者确认
-
返回消息
-
支持死信交换机和死信队列
JDBC 支持 - 存储过程组件
SpEL 支持
当使用 Spring Integration JDBC 适配器的存储过程组件时,您现在可以使用 Spring 表达式语言 (SpEL) 提供存储过程名称或存储函数名称。
这样做可以让您在运行时指定要调用的存储过程。 例如,您可以通过消息头提供想要执行的存储过程名称。 有关更多信息,请参阅 存储过程。
JDBC 支持:特定于通道的消息存储实现
我们添加了一个新的特定于消息通道的消息存储实现,通过使用特定于数据库的 SQL 查询提供更具可伸缩性的解决方案。 有关更多信息,请参阅 支持消息通道。
有序关机
我们在 IntegrationMBeanExporter
中添加了一个名为 stopActiveComponents()
的方法。
它允许 Spring Integration 应用程序有序地关闭,禁止新的入站消息到达某些适配器,并等待一段时间以允许正在处理的消息完成。
ObjectToJsonTransformer
默认情况下,ObjectToJsonTransformer
现在将 content-type
头设置为 application/json
。
有关更多信息,请参阅 转换器。
HTTP 支持
Java over HTTP 序列化不再默认启用。
以前,当在 Serializable
对象上设置 expected-response-type
时,Accept
头没有正确设置。
我们更新了 SerializingHttpMessageConverter
以将 Accept
头设置为 application/x-java-serialized-object
。
但是,由于这可能导致与现有应用程序不兼容,我们决定不再自动将此转换器添加到 HTTP 端点。
如果您希望使用 Java 序列化,则需要通过使用 message-converters
属性(当您使用 XML 配置时)或使用 setMessageConverters()
方法(在 Java 中)将 SerializingHttpMessageConverter
添加到适当的端点。
或者,您可能希望考虑使用 JSON。
通过在类路径上放置 Jackson
即可启用它。