# 最新更新? ## 最新更新in Spring 积分 5.5? 如果你对更多细节感兴趣,请参阅作为 5.5 开发过程的一部分解决的问题跟踪票。 ### 新组件 #### 文件聚合器 引入了基于`FileSplitter.FileMaker`的`CorrelationStrategy`、`ReleaseStrategy`和`MessageGroupProcessor`作为`FileAggregator`组件的实现。有关更多信息,请参见[文件聚合器](./file.html#file-aggregator)。 #### MQTT v5 支持 `Mqttv5PahoMessageDrivenChannelAdapter`和`Mqttv5PahoMessageHandler`(包括相应的`MqttHeaderMapper`)被引入以支持 MQTV5 协议通信。有关更多信息,请参见[MQTT V5 支持](./mqtt.html#mqtt-v5)。 ### 一般变化 所有持久的`MessageGroupStore`实现都提供了基于目标数据库流 API 的`streamMessagesForGroup(Object groupId)`契约。有关更多信息,请参见[消息存储](./message-store.html#message-store)。 现在,`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`必须忽略(或不忽略)调度错误并将消息传递给下一个处理程序。有关更多信息,请参见[全局属性](./configuration.html#global-properties)。 `AbstractPollingEndpoint`(源轮询通道适配器和轮询消费者)将`maxMessagesPerPoll == 0`视为跳过调用源。稍后可以将其更改为不同的值,例如通过控制总线。有关更多信息,请参见[轮询消费者](./endpoint.html#endpoint-pollingconsumer)。 `ConsumerEndpointFactoryBean`现在接受一个`reactiveCustomizer``Function`到任何输入通道作为反应流源,并在下面使用一个`ReactiveStreamsConsumer`。这在 Java DSL 中以`ConsumerEndpointSpec.reactive()`选项的形式进行了介绍,并作为消息传递注释的`@Reactive`嵌套注释进行了介绍。有关更多信息,请参见[反应流支持](./reactive-streams.html#reactive-streams)。 对于一些细粒度的调度用例,现在可以将相关消息处理程序的`groupTimeoutExpression`(an`Aggregator`和`Resequencer`)计算为`java.util.Date`。还将`BiFunction groupConditionSupplier`选项添加到`AbstractCorrelatingMessageHandler`中,以针对要添加到组中的消息提供`MessageGroup`条件。有关更多信息,请参见[Aggregator](./aggregator.html#aggregator)。 可以为`MessageGroup`抽象提供一个`condition`,以便稍后进行评估,从而为小组做出决策。有关更多信息,请参见[消息组条件](./message-store.html#message-group-condition)。 #### 集成流组合 添加了新的`IntegrationFlows.from(IntegrationFlow)`工厂方法,以允许从现有流的输出启动当前的`IntegrationFlow`。此外,在`IntegrationFlowDefinition`中增加了一个`to(IntegrationFlow)`终端操作符,以继续当前在输入通道处的一些其它流。有关更多信息,请参见[集成流组成](./dsl.html#integration-flows-composition)。 #### AMQP 变化 `AmqpInboundChannelAdapter`和`AmqpInboundGateway`(以及相应的 Java DSL 构建器)现在支持`org.springframework.amqp.rabbit.retry.MessageRecoverer`作为通用目的`RecoveryCallback`的 AMQP 特定替代方案。有关更多信息,请参见[AMQP 支持](./amqp.html#amqp)。 #### Redis 变更 `ReactiveRedisStreamMessageProducer`现在为所有`StreamReceiver.StreamReceiverOptionsBuilder`选项设置了 setter,包括一个`onErrorResume`函数。有关更多信息,请参见[Redis 支持](./redis.html#redis)。 #### http 更改 `HttpRequestExecutingMessageHandler`不再回退到`application/x-java-serialized-object`内容类型,并让`RestTemplate`根据提供的`HttpMessageConverter`对请求体转换做出最终决定。它现在还具有一个`extractResponseBody`标志(默认情况下是`true`),以仅返回响应主体,或返回整个`ResponseEntity`作为响应消息的有效负载,而不依赖于所提供的`expectedResponseType`。对于`WebFluxRequestExecutingMessageHandler`也提供了相同的选项。有关更多信息,请参见[HTTP 支持](./http.html#http)。 #### 文件/ftp/sftp 更改 持久文件列表过滤器现在有一个布尔属性`forRecursion`。将此属性设置为`true`,还将设置`alwaysAcceptDirectories`,这意味着出站网关上的递归操作(`ls`和`mget`)现在每次都将遍历完整目录树。这是为了解决未检测到目录树中深层更改的问题。此外,`forRecursion=true`会导致文件的完整路径被用作元数据存储键;这解决了一个问题,即如果同名文件在不同的目录中多次出现,则过滤器无法正常工作。重要提示:这意味着,对于顶层目录下的文件,将找不到持久性元数据存储中的现有密钥。由于这个原因,默认情况下,该属性是`false`;这可能会在将来的版本中发生变化。 `FileInboundChannelAdapterSpec`现在有了一个方便的`recursive(boolean)`选项,而不是要求显式引用`RecursiveDirectoryScanner`。 为了方便起见,现在可以在`mv`命令中使用`remoteDirectoryExpression`。 #### MongoDB 变更 `MongoDbMessageSourceSpec`被添加到 Mongodd Java DSL 中。现在在`MongoDbMessageSource`和`ReactiveMongoDbMessageSource`实现上都公开了`update`选项。 有关更多信息,请参见[MongoDB 支持](./mongodb.html#mongodb)。 #### WebSockets 更改 基于`ServerWebSocketContainer`的 WebSocket 通道适配器现在可以在运行时进行注册和删除。 有关更多信息,请参见[WebSockets 支持](./web-sockets.html#web-sockets)。 #### JPA 变化 `JpaOutboundGateway`现在支持`Iterable`消息有效负载`PersistMode.DELETE`。 有关更多信息,请参见[出站通道适配器](./jpa.html#jpa-outbound-channel-adapter)。 #### 网关更改 以前,在使用 XML 配置时,对于无参数方法,`@Gateway.payloadExpression`会被忽略。有一个可能的中断更改-如果方法被注释为`@Payload`以及`@Gateway`(使用不同的表达式),以前将应用`@Payload`,现在将应用`@Gateway.payloadExpression`。有关更多信息,请参见[带有注释和 XML 的网关配置](./gateway.html#gateway-configuration-annotations)和[调用无参数方法](./gateway.html#gateway-calling-no-argument-methods)。