5.0 和 5.1 之间的更改
新组件
以下是 5.1 中的新增功能组件:
AmqpDedicatedChannelAdvice
请参阅 严格消息排序。
@LongRunningTest
一个 JUnit 5@LongRunningTest
conditional annotation 来检查RUN_LONG_INTEGRATION_TESTS
entry 的值为true
以确定是应该运行还是跳过 TEST。
请参阅 JUnit 规则和条件。
一般更改
版本 5.1 中进行了以下更改:
Java DSL
这IntegrationFlowContext
现在是一个接口,而IntegrationFlowRegistration
是IntegrationFlowContext
.
新的logAndReply()
为方便起见,当您希望在请求-回复配置的流结束时进行记录时,引入了运算符。
这避免了与log()
将其视为单向端流分量。
为任何NamedComponent
在集成流程中,现在基于组件类型,以便从可视化工具、日志分析器和指标收集器中获得更好的可读性。
这GenericHandler.handle()
现在除了MessageHeaders
type 作为第二个参数。
Dispatcher 异常
捕获并重新引发的异常AbstractDispatcher
现在更加一致:
-
一个
MessagingException
具有failedMessage
property 将原封不动地重新抛出。 -
所有其他异常都包装在
MessageDeliveryException
使用failedMessage
属性集。
以前:
-
一个
MessagingException
具有failedMessage
property 被原封不动地重新抛出 -
一个
MessagingException
那个没有failedMessage
属性被包装在MessagingException
使用failedMessage
属性集。 -
其他
RuntimeException
实例被原封不动地重新抛出。 -
检查异常包装在
MessageDeliveryException
使用failedMessage
属性集。
全局通道拦截器
全局通道拦截器现在应用于动态注册的通道,例如通过IntegrationFlowContext
当使用 Java DSL 或使用beanFactory.initializeBean()
.
以前,在刷新应用程序上下文后创建 bean 时,不会应用拦截器。
通道拦截器
ChannelInterceptor.postReceive()
未收到消息时不再调用;不再需要检查null
Message<?>
.
以前,该方法被调用。
如果你有一个依赖于先前行为的拦截器,请实现afterReceiveCompleted()
相反,因为该方法被调用,无论是否收到消息。
此外,PolledAmqpChannel
和PolledJmsChannel
以前未调用afterReceiveCompleted()
跟null
;他们现在这样做了。
集成流:生成的 Bean 名称
从版本 5.0.5 开始,为IntegrationFlow
包括 Flow Bean 名称,后跟一个点作为前缀。
例如,如果将流 Bean 命名为flowBean
,生成的 Bean 可能被命名为flowBean.generatedBean
.
有关更多信息,请参阅Working With Message Flows。
Aggregator 更改
如果groupTimeout
的计算结果为负值,则聚合器现在会立即使组过期。
只null
被视为对当前消息不执行任何作的信号。
新的popSequence
属性以允许(默认情况下)调用MessageBuilder.popSequenceDetails()
对于输出消息。
此外,还有一个AbstractAggregatingMessageGroupProcessor
现在返回一个AbstractIntegrationMessageBuilder
而不是整个Message
进行优化。
有关更多信息,请参阅 Aggregator。
@Publisher 注释更改
从版本 5.1 开始,您必须显式打开@Publisher
AOP 功能@EnablePublisher
或使用<int:enable-publisher>
子元素<int:annotation-config>
.
此外,proxy-target-class
和order
添加了用于调整ProxyFactory
配置。
看注解驱动的配置,使用@Publisher
注解了解更多信息。
文件更改
如果您正在使用FileExistsMode.APPEND
或FileExistsMode.APPEND_NO_FLUSH
您可以提供newFileCallback
将在创建新文件时调用。
该回调接收新创建的文件和触发回调的消息。
例如,这可用于编写 CSV 标头。
这FileReadingMessageSource
now 不会检查并创建目录,直到其start()
被调用。
因此,如果FileReadingMessageSource
具有autoStartup = false
,则在应用程序启动期间不会发生针对文件系统的故障。
有关更多信息,请参阅文件支持。
AMQP 更改
我们使ID
和Timestamp
标头映射更改DefaultAmqpHeaderMapper
.
有关更多信息,请参阅 AMQP Message Headers 底部附近的注释。
这contentType
Header 现在已正确映射为 General Headers 映射中的一个条目。
有关更多信息,请参阅 contentType Header 。
从版本 5.1.3 开始,如果在使用手动确认时发生消息转换异常,并且定义了错误通道,则有效负载为ManualAckListenerExecutionFailedException
与额外的channel
和deliveryTag
性能。
这使得错误流能够确认/nack 原始消息。
有关更多信息,请参阅 入站消息转换 。
JDBC 更改
一个令人困惑的max-rows-per-poll
JDBC 入站通道适配器和 JDBC 出站网关上的属性已被弃用,取而代之的是新引入的max-rows
财产。
这JdbcMessageHandler
现在支持batchUpdate
当请求消息的有效负载是Iterable
类型。
的INT_CHANNEL_MESSAGE
表(对于JdbcChannelMessageStore
) 已优化。
如果您在此类存储中有大型消息组,则可能需要更改索引。
有关更多信息,请参阅 JDBC 支持。
FTP 和 SFTP 更改
一个RotatingServerAdvice
现在可用于使用入站通道适配器轮询多个服务器和目录。
有关更多信息,请参见入站通道适配器:轮询多个服务器和目录和入站通道适配器:轮询多个服务器和目录。
此外,入站适配器localFilenameExpression
实例可以包含#remoteDirectory
变量,其中包含正在轮询的远程目录。
比较器的泛型类型(用于对流适配器的获取文件列表进行排序)已从Comparator<AbstractFileInfo<F>>
自Comparator<F>
.
有关更多信息,请参阅 FTP 流入站通道适配器 和 SFTP 流入站通道适配器。
此外,现在可以为入站通道适配器的同步器提供Comparator
.
这在使用maxFetchSize
以限制检索的文件。
这CachingSessionFactory
具有新属性testSession
如果为 true,则会导致工厂执行test()
作Session
从缓存中签出现有会话时。
有关更多信息,请参阅 SFTP 会话缓存和 FTP 会话缓存。
TCP 支持
使用 SSL 时,现在默认启用主机验证,以防止使用受信任证书进行中间人攻击。 有关更多信息,请参阅主机验证。
此外,现在可以在DefaultTcpSSLContextSupport
.
Twitter 支持
由于 Spring Social 项目已进入生命周期结束状态,因此 Spring Integration 中的 Twitter 支持已移至 Extensions 项目。 有关更多信息,请参见 Spring Integration Social Twitter。
JMS 支持
这JmsSendingMessageHandler
现在提供deliveryModeExpression
和timeToLiveExpression
选项来确定 JMS 消息在运行时发送的相应 QoS 选项。
这DefaultJmsHeaderMapper
现在允许映射入站JMSDeliveryMode
和JMSExpiration
properties (属性)true
各自setMapInboundDeliveryMode()
和setMapInboundExpiration()
选项。
当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 meter 变得更加简单。 有关更多信息,请参阅 Micrometer 集成。
集成图定制
现在可以向IntegrationNode
S 通过Function<NamedComponent, Map<String, Object>> additionalPropertiesCallback
在IntegrationGraphServer
.
有关更多信息,请参阅 Integration Graph。
集成全局属性
现在,当DEBUG
逻辑电平为org.springframework.integration
类别。
有关更多信息,请参阅全局属性。
这receiveTimeout
为@Poller
这@Poller
注解现在提供了一个receiveTimeout
方便的选项。
看使用@Poller
注解了解更多信息。