5.0 和 5.1 之间的变化
新组件
以下组件在 5.1 中是新增的:
-
<<`AmqpDedicatedChannelAdvice`,x5.1-AmqpDedicatedChannelAdvice>>
AmqpDedicatedChannelAdvice
请参阅 严格消息排序。
@LongRunningTest
提供了一个 JUnit 5 @LongRunningTest
条件注解,用于检查环境或系统属性中 RUN_LONG_INTEGRATION_TESTS
条目是否为 true
,以确定测试是否应该运行或跳过。
请参阅 JUnit 规则和条件。
一般变化
5.1 版本中进行了以下更改:
-
<<`ObjectToJsonTransformer`,x5.1-object-to-json-transformer>>
-
<<@Publisher annotation changes,x5.1-publisher>>
Java DSL
IntegrationFlowContext
现在是一个接口,IntegrationFlowRegistration
是 IntegrationFlowContext
的内部接口。
引入了一个新的 logAndReply()
操作符,方便在请求-回复配置的流末尾进行日志记录。
这避免了与 log()
混淆,log()
被视为单向结束流组件。
集成流中任何 NamedComponent
的生成 bean 名称现在基于组件类型,以便于可视化工具、日志分析器和指标收集器更好地读取。
GenericHandler.handle()
现在接受 MessageHeaders
类型作为第二个参数。
调度器异常
AbstractDispatcher
捕获并重新抛出的异常现在更加一致:
-
任何具有
failedMessage
属性的MessagingException
都将原样重新抛出。 -
所有其他异常都将包装在
MessageDeliveryException
中,并设置failedMessage
属性。
以前:
-
任何具有
failedMessage
属性的MessagingException
都将原样重新抛出 -
没有
failedMessage
属性的MessagingException
将包装在设置了failedMessage
属性的MessagingException
中。 -
其他
RuntimeException
实例将原样重新抛出。 -
受检异常将包装在设置了
failedMessage
属性的MessageDeliveryException
中。
全局通道拦截器
全局通道拦截器现在适用于动态注册的通道,例如通过使用 Java DSL 的 IntegrationFlowContext
或使用 beanFactory.initializeBean()
初始化的 bean。
以前,当 bean 在应用程序上下文刷新后创建时,拦截器不适用。
通道拦截器
当没有收到消息时,不再调用 ChannelInterceptor.postReceive()
;不再需要检查 Message<?>
是否为 null
。
以前,该方法会被调用。
如果您有一个依赖于以前行为的拦截器,请改用 afterReceiveCompleted()
,因为无论是否收到消息,该方法都会被调用。
此外,PolledAmqpChannel
和 PolledJmsChannel
以前不调用 afterReceiveCompleted()
并传入 null
;它们现在会这样做。
集成流:生成的 Bean 名称
从 5.0.5 版本开始,IntegrationFlow
中组件的生成 bean 名称包含流 bean 名称,后跟一个点,作为前缀。
例如,如果流 bean 被命名为 flowBean
,则生成的 bean 可能被命名为 flowBean.generatedBean
。
有关更多信息,请参阅 使用消息流。
聚合器更改
如果 groupTimeout
的评估结果为负值,聚合器现在会立即使该组过期。
只有 null
被视为对当前消息不执行任何操作的信号。
引入了一个新的 popSequence
属性,允许(默认情况下)为输出消息调用 MessageBuilder.popSequenceDetails()
。
AbstractAggregatingMessageGroupProcessor
现在也返回 AbstractIntegrationMessageBuilder
而不是整个 Message
以进行优化。
有关更多信息,请参阅 聚合器。
@Publisher 注解更改
从 5.1 版本开始,您必须通过使用 @EnablePublisher
或在 <int:annotation-config>
上使用 <int:enable-publisher>
子元素来显式启用 @Publisher
AOP 功能。
此外,还添加了 proxy-target-class
和 order
属性来调整 ProxyFactory
配置。
有关更多信息,请参阅 使用 @Publisher
注解的注解驱动配置。
文件更改
如果您使用 FileExistsMode.APPEND
或 FileExistsMode.APPEND_NO_FLUSH
,您可以提供一个 newFileCallback
,它将在创建新文件时被调用。
此回调接收新创建的文件以及触发回调的消息。
例如,这可以用于写入 CSV 标头。
FileReadingMessageSource
现在直到调用其 start()
才检查和创建目录。
因此,如果 FileReadingMessageSource
的入站通道适配器具有 autoStartup = false
,则在应用程序启动期间不会发生针对文件系统的故障。
有关更多信息,请参阅 文件支持。
AMQP 更改
我们已在 DefaultAmqpHeaderMapper
中对 ID
和 Timestamp
消息头映射进行了更改。
有关更多信息,请参阅 AMQP 消息头 底部的注释。
contentType
消息头现在已正确映射为通用消息头映射中的条目。
有关更多信息,请参阅 contentType 消息头。
从 5.1.3 版本开始,如果在使用手动确认时发生消息转换异常,并且定义了错误通道,则有效负载是一个 ManualAckListenerExecutionFailedException
,其中包含附加的 channel
和 deliveryTag
属性。
这使得错误流能够确认/拒绝原始消息。
有关更多信息,请参阅 入站消息转换。
JDBC 更改
JDBC 入站通道适配器和 JDBC 出站网关上的容易混淆的 max-rows-per-poll
属性已被弃用,取而代之的是新引入的 max-rows
属性。
当请求消息的有效负载是 Iterable
类型实例时,JdbcMessageHandler
现在支持 batchUpdate
功能。
INT_CHANNEL_MESSAGE
表(用于 JdbcChannelMessageStore
)的索引已优化。
如果您的存储中有大型消息组,您可能希望更改索引。
有关更多信息,请参阅 JDBC 支持。
FTP 和 SFTP 更改
RotatingServerAdvice
现已可用,可用于入站通道适配器轮询多个服务器和目录。
有关更多信息,请参阅 入站通道适配器:轮询多个服务器和目录 和 入站通道适配器:轮询多个服务器和目录。
此外,入站适配器 localFilenameExpression
实例可以包含 #remoteDirectory
变量,其中包含正在轮询的远程目录。
比较器(用于对流式适配器获取的文件列表进行排序)的泛型类型已从 Comparator<AbstractFileInfo<F>>
更改为 Comparator<F>
。
有关更多信息,请参阅 FTP 流式入站通道适配器 和 SFTP 流式入站通道适配器。
此外,入站通道适配器的同步器现在可以提供一个 Comparator
。
这在使用 maxFetchSize
限制检索文件时很有用。
CachingSessionFactory
有一个新属性 testSession
,当为 true 时,工厂在从缓存中检出现有会话时会对 Session
执行 test()
操作。
TCP 支持
使用 SSL 时,默认启用主机验证,以防止使用受信任证书进行中间人攻击。 有关更多信息,请参阅 主机验证。
此外,密钥和信任存储类型现在可以在 DefaultTcpSSLContextSupport
上配置。
Twitter 支持
由于 Spring Social 项目已进入 生命周期结束状态,Spring Integration 中的 Twitter 支持已移至 Extensions 项目。 有关更多信息,请参阅 Spring Integration Social Twitter。
JMS 支持
JmsSendingMessageHandler
现在提供了 deliveryModeExpression
和 timeToLiveExpression
选项,用于在运行时确定要发送的 JMS 消息的相应 QoS 选项。
DefaultJmsHeaderMapper
现在允许通过将相应的 setMapInboundDeliveryMode()
和 setMapInboundExpiration()
选项设置为 true
来映射入站 JMSDeliveryMode
和 JMSExpiration
属性。
当 JmsMessageDrivenEndpoint
或 JmsInboundGateway
停止时,关联的监听器容器现在会关闭;这会关闭其共享连接和任何消费者。
您可以配置端点以恢复到以前的行为。
有关更多信息,请参阅 JMS 支持。
HTTP/WebFlux 支持
statusCodeExpression
(和 Function
)现在以 RequestEntity<?>
作为评估上下文的根对象提供,因此请求头、方法、URI 和正文可用于目标状态码计算。
有关更多信息,请参阅 HTTP 支持 和 WebFlux 支持。
JMX 更改
如果对象名称键值包含除 Java 标识符(或句点 .
)中允许的任何字符以外的任何字符,则会将其引用。
例如 org.springframework.integration:type=MessageChannel,
name="input:foo.myGroup.errors"
。
这有一个副作用,即以前“允许”的带有此类字符的名称现在将被引用。
例如 org.springframework.integration:type=MessageChannel,
name="input#foo.myGroup.errors"
。
Micrometer 支持更改
现在可以更简单地自定义框架创建的标准 Micrometer 仪表。 有关更多信息,请参阅 Micrometer 集成。
集成图自定义
现在可以通过 IntegrationGraphServer
上的 Function<NamedComponent, Map<String, Object>> additionalPropertiesCallback
向 IntegrationNode
添加附加属性。
有关更多信息,请参阅 集成图。
集成全局属性
当 org.springframework.integration
类别打开 DEBUG
逻辑级别时,集成全局属性(包括默认值)现在可以打印在日志中。
有关更多信息,请参阅 全局属性。
@Poller
的 receiveTimeout
@Poller
注解现在提供了 receiveTimeout
选项,以方便使用。
有关更多信息,请参阅 使用 @Poller
注解。