跳到主要内容

5.0 和 5.1 之间的更改

QWen Plus 中英对照 Changes between 5.0 and 5.1

新组件

以下组件是 5.1 版中的新增内容:

  • [AmqpDedicatedChannelAdvice](#5.1 AmqpDedicatedChannelAdvice)

AmqpDedicatedChannelAdvice

改进的函数支持

java.util.function 接口现在在 Framework 组件中具有改进的集成支持。此外,Kotlin lambda 现在可以用于处理程序和源方法。

@LongRunningTest

提供了一个 JUnit 5 @LongRunningTest 条件注解,用于检查环境或系统属性中的 RUN_LONG_INTEGRATION_TESTS 项的值是否为 true ,以确定测试是否应该运行或跳过。

通用更改

在版本 5.1 中,做了以下更改:

Java DSL

IntegrationFlowContext 现在是一个接口,而 IntegrationFlowRegistrationIntegrationFlowContext 的一个内部接口。

引入了一个新的 logAndReply() 操作符,以便在请求 - 回复配置的流结束时进行日志记录。这可以避免与被视为单向结束流组件的 log() 混淆。

任何在集成流中的 NamedComponent 生成的bean名称现在是基于组件类型,以便从可视化工具、日志分析器和指标收集器中更好地阅读。

GenericHandler.handle() 现在接受 MessageHeaders 类型作为第二个参数。

分派器异常

AbstractDispatcher 捕获并重新抛出的异常现在更加一致:

  • 任何具有 failedMessage 属性的 MessagingException 都会被重新抛出,且不作更改。

  • 所有其他异常都会被包装在 MessageDeliveryException 中,并设置 failedMessage 属性。

之前:

  • 任何具有 failedMessage 属性的 MessagingException 都被重新抛出,未作更改

  • 没有 failedMessage 属性的 MessagingException 被包装在一个设置了 failedMessage 属性的 MessagingException 中。

  • 其他 RuntimeException 实例被重新抛出,未作更改。

  • 检查型异常被包装在一个设置了 failedMessage 属性的 MessageDeliveryException 中。

全局通道拦截器

全局通道拦截器现在适用于动态注册的通道,例如通过 IntegrationFlowContext 使用 Java DSL 或使用 beanFactory.initializeBean() 初始化的 bean 时。以前,当在应用程序上下文刷新后创建 bean 时,拦截器不会被应用。

通道拦截器

当没有消息接收时,ChannelInterceptor.postReceive() 不再被调用;不再需要检查 nullMessage<?>。以前,该方法会被调用。如果你有一个依赖于之前行为的拦截器,则应实现 afterReceiveCompleted(),因为无论是否接收到消息,该方法都会被调用。此外,PolledAmqpChannelPolledJmsChannel 以前不会在 null 情况下调用 afterReceiveCompleted();现在它们会这样做。

ObjectToJsonTransformer

ObjectToJsonTransformer 引入了一种新的 ResultType.BYTES 模式。

更多信息请参见 JSON Transformers

集成流:生成的 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-classorder 属性以调整 ProxyFactory 配置。

有关更多信息,请参阅 使用 @Publisher 注解的注解驱动配置

文件更改

如果你正在使用 FileExistsMode.APPENDFileExistsMode.APPEND_NO_FLUSH,你可以提供一个 newFileCallback,它将在创建新文件时被调用。这个回调接收新创建的文件和触发回调的消息。例如,这可以用来写入 CSV 文件头。

FileReadingMessageSource 现在不会检查和创建目录,直到其 start() 被调用。因此,如果 FileReadingMessageSource 的入站通道适配器有 autoStartup = false,在应用程序启动期间不会有针对文件系统的失败。

更多信息请参见文件支持

AMQP 更改

我们在 DefaultAmqpHeaderMapper 中对 IDTimestamp 标头映射进行了更改。有关更多信息,请参阅 AMQP 消息标头底部附近的说明。

contentType 标头现在已正确映射为通用标头映射中的一个条目。有关更多信息,请参阅 contentType 标头

从 5.1.3 版本开始,如果在使用手动确认时发生消息转换异常,并且定义了错误通道,则有效负载是一个带有额外 channeldeliveryTag 属性的 ManualAckListenerExecutionFailedException。这使得错误流能够确认或拒绝原始消息。更多信息,请参见 入站消息转换

JDBC 更改

JDBC 入站通道适配器和 JDBC 出站网关上的一个令人困惑的 max-rows-per-poll 属性已弃用,取而代之的是新引入的 max-rows 属性。

JdbcMessageHandler 现在支持 batchUpdate 功能,当请求消息的有效负载是 Iterable 类型的实例时。

INT_CHANNEL_MESSAGE 表(对于 JdbcChannelMessageStore)的索引已进行优化。如果您在这样的存储中有大型消息组,您可能需要修改索引。

更多信息请参见 JDBC 支持

FTP 和 SFTP 更改

现在可以使用 RotatingServerAdvice 来轮询多个服务器和目录的入站通道适配器。更多信息请参见 Inbound Channel Adapters: Polling Multiple Servers and DirectoriesInbound Channel Adapters: Polling Multiple Servers and Directories

此外,入站适配器 localFilenameExpression 实例可以包含 #remoteDirectory 变量,该变量包含正在轮询的远程目录。比较器的通用类型(用于对流式适配器获取的文件列表进行排序)已从 Comparator<AbstractFileInfo<F>> 更改为 Comparator<F>。更多信息请参见 FTP 流式入站通道适配器SFTP 流式入站通道适配器

此外,入站通道适配器的同步器现在可以提供一个 Comparator。这在使用 maxFetchSize 限制检索的文件时非常有用。

CachingSessionFactory 有一个新属性 testSession,当其值为 true 时,会导致工厂在从缓存中检出现有会话时对 Session 执行 test() 操作。

详见 SFTP 会话缓存FTP 会话缓存 以获取更多信息。

outbound 网关的 MPUT 命令现在支持带有文件或字符串集合的消息有效负载。更多信息请参见 SFTP outbound 网关FTP outbound 网关

TCP 支持

当使用 SSL 时,默认启用了主机验证,以防止使用受信任证书的中间人攻击。有关更多信息,请参阅主机验证

此外,现在可以在 DefaultTcpSSLContextSupport 上配置密钥库和信任库类型。

Twitter 支持

由于 Spring Social 项目已移至 生命周期结束状态,Spring Integration 中的 Twitter 支持已移至 Extensions 项目。更多信息,请参阅 Spring Integration Social Twitter

JMS 支持

JmsSendingMessageHandler 现在提供了 deliveryModeExpressiontimeToLiveExpression 选项,以在运行时确定要发送的 JMS 消息的相应 QoS 选项。DefaultJmsHeaderMapper 现在允许通过将各自的 setMapInboundDeliveryMode()setMapInboundExpiration() 选项设置为 true 来映射传入的 JMSDeliveryModeJMSExpiration 属性。当 JmsMessageDrivenEndpointJmsInboundGateway 停止时,现在会关闭关联的监听器容器;这会关闭其共享连接和任何消费者。您可以配置端点以恢复到以前的行为。

详见 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>> additionalPropertiesCallbackIntegrationNode 添加额外的属性。更多信息,请参见 集成图

集成全局属性

现在可以在日志中打印集成的全局属性(包括默认值),当 org.springframework.integration 类别的 DEBUG 日志级别被开启时。更多信息请参见全局属性

@PollerreceiveTimeout

@Poller 注解现在提供了一个 receiveTimeout 选项,以便于使用。更多信息请参见 使用 @Poller 注解