Spring Integration5.5
,以及Spring Integration5.4.7
补丁 GA 版本已经发布。
这两个版本都可以从Maven中心获得,建议升级项目,或者从各自最新的Spring Boot补丁版本中提取它们。
compile 'org.springframework.integration:spring-integration-core:5.5.0'
复制代码
Spring Integration5.4.7
版本主要包含关键的bug修复,以下是对Spring Integration5.5
所做的明显修改,一般来说,这些修改是基于社区的反馈,使框架对终端用户的使用情况有用。
-
对Spring Native兼容性的支持–很多Bean定义的反射被重新设计为功能性风格,这甚至改善了普通JVM应用程序的启动时间。
-
引入了
FileAggregator
组件。更多信息请参见其JavaDocs。 -
所有持久化的
MessageGroupStore
实现都提供了一个基于目标数据库流API的streamMessagesForGroup(Object groupId)
合同。 -
integrationGlobalProperties
自定义bean现在必须是org.springframework.integration.context.IntegrationProperties
的实例,而不是被废弃的java.util.Properties
表示。 所有这些集成属性现在都作为Spring Boot中的自动配置属性公开。 -
AbstractPollingEndpoint
的maxMessagesPerPoll == 0
现在被视为跳过调用源。 -
为注解配置引入了
@Reactive
子注解,以便为底层消费者端点应用Function<? super Flux<Message<?>>, ? extends Publisher<Message<?>>> reactiveCustomizer
,并使其成为独立于输入通道的反应式。在 Java DSL 中可以通过ConsumerEndpointSpec.reactive()
选项实现相同的行为。 -
MongoDb消息源现在有一个可选的
update
,用于标记刚从集合中提取的文档。 -
基于WebSocket服务器端点的通道适配器现在可以在运行时注册(和删除)。
-
MessageGroup
抽象现在有一个condition
属性,可以在以后查阅,而不是整个组的迭代。AbstractCorrelatingMessageHandler
,反过来,暴露一个BiFunction<Message<?>, String, String> conditionSupplier
,从当前处理的消息中提取可能的组条件。 -
DelayHandler
现在注册了一个TransactionSynchronization
,只在当前事务提交时安排一个延迟任务。 -
GreenMail库现在被用于电子邮件集成测试。
请参阅文档中的 “新内容“以了解更多信息。 请务必查阅 “迁移指南“,因为升级可能会导致一些破坏性变化。
What’s New
新组件
文件聚合器
一个基于FileSplitter.FileMaker
的CorrelationStrategy
、ReleaseStrategy
和MessageGroupProcessor
的实现,作为一个FileAggregator
的组件被引入。 更多信息请参见文件聚合器。
一般性变化
所有持久化的MessageGroupStore
实现都提供了一个基于目标数据库流API的streamMessagesForGroup(Object groupId)
合同。 更多信息请参见消息存储。
integrationGlobalProperties
Bean(如果已声明)现在必须是org.springframework.integration.context.IntegrationProperties
的实例,而不是java.util.Properties
,为了向后兼容,该支持已被废弃。添加了spring.integration.channels.error.requireSubscribers=true
全局属性,以表明全局默认errorChannel
必须配置requireSubscribers
选项(或不配置)。添加了spring.integration.channels.error.ignoreFailures=true
全局属性,以表明全局默认errorChannel
必须忽略(或不忽略)调度错误并将消息传递给下一个处理器。 更多信息请参见全局属性。
一个AbstractPollingEndpoint
(源轮询通道适配器和轮询消费者)将maxMessagesPerPoll == 0
视为跳过调用源。它可以在以后改变为不同的值,例如通过控制总线。更多信息见轮询消费者。
ConsumerEndpointFactoryBean
现在接受一个reactiveCustomizer
Function
到任何输入通道作为反应流源,并在下面使用一个ReactiveStreamsConsumer
。这在Java DSL中作为一个ConsumerEndpointSpec.reactive()
选项和作为一个@Reactive
嵌套注解的消息注解被覆盖。 更多信息请参见反应流支持。
相关消息处理程序的groupTimeoutExpression
(一个Aggregator
和Resequencer
)现在可以被评估为一个java.util.Date
,用于一些细粒度的调度用例。同时,BiFunction groupConditionSupplier
选项被添加到AbstractCorrelatingMessageHandler
,以提供一个针对要添加到组中的消息的MessageGroup
条件。 更多信息请参见聚合器。
MessageGroup
抽象可以提供一个condition
,以便以后评估,为组做出决定。 更多信息请参见消息组条件。
AMQP变化
AmqpInboundChannelAdapter
和AmqpInboundGateway
(以及各自的Java DSL构建器)现在支持一个org.springframework.amqp.rabbit.retry.MessageRecoverer
,作为通用的RecoveryCallback
的AMQP特定替代。 更多信息请参见AMQP支持。
Redis的变化
ReactiveRedisStreamMessageProducer
现在有了所有StreamReceiver.StreamReceiverOptionsBuilder
选项的设置器,包括一个onErrorResume
函数。 更多信息请参见Redis 支持。
HTTP 更改
HttpRequestExecutingMessageHandler
不再回退到application/x-java-serialized-object
内容类型,而是让RestTemplate
根据所提供的HttpMessageConverter
最终决定请求主体的转换。它现在还有一个extractResponseBody
标志(默认为true
),可以只返回响应主体,或者返回整个ResponseEntity
作为回复信息的有效载荷,与所提供的expectedResponseType
无关。同样的选项也出现在WebFluxRequestExecutingMessageHandler
上。更多信息见HTTP 支持。
文件/FTP/SFTP变化
持久文件列表过滤器现在有一个布尔属性forRecursion
。将此属性设置为true
,也会设置alwaysAcceptDirectories
,这意味着在出站网关上的递归操作 (ls
和mget
) 现在每次都会遍历整个目录树。这是为了解决在目录树深处的变化无法被检测的问题。 此外,forRecursion=true
导致文件的完整路径被用作元数据存储的键;这解决了一个问题,即如果一个具有相同名称的文件在不同的目录中出现多次,过滤器不能正常工作。 重要的是:这意味着在一个持久的元数据存储中的现有键将不会被发现在顶级目录下的文件。由于这个原因,该属性默认为false
;这可能在未来的版本中改变。
FileInboundChannelAdapterSpec
现在有一个方便的recursive(boolean)
选项,而不是需要明确地引用RecursiveDirectoryScanner
。
MongoDB变化
MongoDbMessageSourceSpec
被添加到 MongoDd Java DSL 中。现在,MongoDbMessageSource
和ReactiveMongoDbMessageSource
的实现中都有一个update
选项。
WebSockets 变更
基于ServerWebSocketContainer
的 WebSocket 通道适配器现在可以在运行时注册和删除。