5.0 和 5.1 之间的更改

新增组件

5.1 版本中新增了以下组件

AmqpDedicatedChannelAdvice

请参阅 严格消息排序

改进的函数支持

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

@LongRunningTest

提供了一个 JUnit Jupiter @LongRunningTest 条件注解,用于检查环境或系统属性中是否存在值为 trueRUN_LONG_INTEGRATION_TESTS 条目,以确定是否应运行或跳过测试。

请参阅 JUnit 条件

一般性变更

5.1 版本中进行了以下更改

Java DSL

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

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

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

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

调度程序异常

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

  • 任何具有 failedMessage 属性的 MessagingException 都将原样重新抛出。

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

以前

  • 任何具有 failedMessage 属性的 MessagingException 都将原样重新抛出

  • 没有 failedMessage 属性的 MessagingException 会被包装在 MessagingException 中,并设置 failedMessage 属性。

  • 其他 RuntimeException 实例会原样重新抛出。

  • 受检异常会包装在 MessageDeliveryException 中,并设置 failedMessage 属性。

全局通道拦截器

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

通道拦截器

当没有收到消息时,不再调用 ChannelInterceptor.postReceive();不再需要检查 Message<?> 是否为 null。以前,该方法会被调用。如果您有一个依赖于以前行为的拦截器,请改为实现 afterReceiveCompleted(),因为无论是否收到消息,都会调用该方法。此外,PolledAmqpChannelPolledJmsChannel 以前不会使用 null 调用 afterReceiveCompleted();现在会了。

ObjectToJsonTransformer

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

有关更多信息,请参阅 JSON 转换器

集成流:生成的 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 版本开始,如果在使用手动确认时发生消息转换异常,并且定义了错误通道,则有效负载是 ManualAckListenerExecutionFailedException,并带有额外的 channeldeliveryTag 属性。这使得错误流能够确认/拒绝原始消息。有关更多信息,请参阅 入站消息转换

JDBC 变更

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

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

INT_CHANNEL_MESSAGE 表(用于 JdbcChannelMessageStore)的索引已优化。如果您在此类存储中有大型消息组,您可能希望更改索引。

有关更多信息,请参阅 JDBC 支持

FTP 和 SFTP 变更

现在可以使用 RotatingServerAdvice 来轮询多个服务器和目录,并使用入站通道适配器。有关更多信息,请参阅 入站通道适配器:轮询多个服务器和目录入站通道适配器:轮询多个服务器和目录

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

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

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

有关更多信息,请参阅 SFTP 会话缓存FTP 会话缓存

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

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 注解

© . This site is unofficial and not affiliated with VMware.