对于最新的稳定版本,请使用 Spring Integration 6.5.1! |
5.0 和 5.1 之间的更改
新组件
以下组件是 5.1 中的新增组件:
AmqpDedicatedChannelAdvice
请参阅严格消息排序。
@LongRunningTest
一个 JUnit 5@LongRunningTest
提供条件注释以检查RUN_LONG_INTEGRATION_TESTS
条目,值为true
以确定是否应运行或跳过测试。
请参阅 JUnit 规则和条件。
一般更改
在 5.1 版中进行了以下更改:
Java DSL
这IntegrationFlowContext
现在是一个接口,并且IntegrationFlowRegistration
是IntegrationFlowContext
.
一个新的logAndReply()
引入运算符是为了方便您希望在请求-回复配置的流结束时进行日志记录。
这避免了与log()
它被视为单向端流组件。
为任何NamedComponent
集成流现在基于组件类型,以便可视化工具、日志分析器和指标收集器具有更好的可读性。
这GenericHandler.handle()
现在除了MessageHeaders
type 为第二个参数。
调度程序异常
捕获并重新引发的异常AbstractDispatcher
现在更加一致:
-
一个
MessagingException
任何类型的failedMessage
属性被重新抛出,原封不动。 -
所有其他异常都包装在
MessageDeliveryException
使用failedMessage
属性集。
以前:
-
一个
MessagingException
任何类型的failedMessage
财产被重新抛弃,原封不动 -
一个
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
.
请参阅使用消息流以获取更多信息。
聚合器更改
如果groupTimeout
的计算结果为负值,则聚合器现在会立即使组过期。
只null
被视为对当前消息不执行任何作的信号。
一个新的popSequence
属性已引入以允许(默认情况下)调用MessageBuilder.popSequenceDetails()
用于输出消息。
还有一个AbstractAggregatingMessageGroupProcessor
现在返回一个AbstractIntegrationMessageBuilder
而不是整体Message
用于优化。
有关详细信息,请参阅聚合器。
@Publisher注释更改
从 5.1 版开始,您必须显式启用@Publisher
AOP 功能,使用@EnablePublisher
或使用<int:enable-publisher>
child 元素<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 消息头底部附近的注释。
这contentType
header 现在已正确映射为常规标头映射中的条目。
有关详细信息,请参阅 contentType 标头。
从版本 5.1.3 开始,如果在使用手动确认时发生消息转换异常,并且定义了错误通道,则有效负载是ManualAckListenerExecutionFailedException
加上channel
和deliveryTag
性能。
这使错误流能够确认/nack原始消息。
有关详细信息,请参阅入站消息转换。
JDBC 更改
令人困惑max-rows-per-poll
JDBC Inbound Channel Adapter 和 JDBC Outbound Gateway 上的属性已被弃用,取而代之的是新引入的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
从缓存中签出现有会话时。
TCP 支持
使用 SSL 时,现在默认启用主机验证,以防止使用受信任证书进行中间人攻击。有关详细信息,请参阅主机验证。
此外,现在可以在DefaultTcpSSLContextSupport
.
Twitter 支持
由于 Spring Social 项目已移至生命周期结束状态,因此 Spring Integration 中的 Twitter 支持已移至 Extensions 项目。有关更多信息,请参阅 Spring Integration Social Twitter 。
JMS 支持
这JmsSendingMessageHandler
现在提供deliveryModeExpression
和timeToLiveExpression
选项来确定 JMS 消息在运行时发送的相应 QoS 选项。 这DefaultJmsHeaderMapper
现在允许映射入站JMSDeliveryMode
和JMSExpiration
属性通过设置为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"
.
千分尺支架变更
现在,自定义框架创建的标准千分尺仪表更加简单。有关更多信息,请参阅千分尺集成。
集成图自定义
现在可以向IntegrationNode
通过Function<NamedComponent, Map<String, Object>> additionalPropertiesCallback
在IntegrationGraphServer
. 有关更多信息,请参阅集成图。
集成全局属性
现在可以在日志中打印集成全局属性(包括默认值),当DEBUG
逻辑级别已打开org.springframework.integration
类别。 有关详细信息,请参阅全局属性。
这receiveTimeout
为@Poller
这@Poller
注释现在提供receiveTimeout
方便的选项。
看使用@Poller
注解了解更多信息。