什么是新内容?

对于已经熟悉Spring Integration的读者,本章将提供对版本7.0的新功能的简要概述。spring-doc.cadn.net.cn

如果您对早期版本中引入的更改和功能感兴趣,请参阅变更历史记录spring-doc.cadn.net.cn

Spring Integration 7.0 有哪些新功能?

对于更多详细信息,请参阅作为7.0开发过程一部分解决的GitHub Issuesspring-doc.cadn.net.cn

一般而言,项目已经迁移到了最新的依赖版本。 Java 17 仍然是基础版本,但支持 Java 24。spring-doc.cadn.net.cn

常规变更

Junit 4-Based Support Components 已弃用。spring-doc.cadn.net.cn

该项目现在利用JSpecify注解来暴露null安全的API,并在构建过程中通过NullAway检查这些nullability声明的一致性。spring-doc.cadn.net.cn

spring-retry 依赖项及其所有 API 使用已被 Spring Framework 核心模块中的重试 API 取代。 这一重大变更体现了整个 Spring 产品组合的自然演进。 总体而言,以下引用已迁移:spring-doc.cadn.net.cn

  • org.springframework.retry.support.RetryTemplateorg.springframework.core.retry.RetryTemplate;spring-doc.cadn.net.cn

  • org.springframework.retry.RetryPolicyorg.springframework.core.retry.RetryPolicy;spring-doc.cadn.net.cn

  • org.springframework.retry.RecoveryCallbackorg.springframework.integration.core.RecoveryCallback. 没有Spring框架中的RecoveryCallback抽象,因为普通的try..catchRetryException上已经足够。 对于Spring Integration而言,RecoveryCallback作为一个死信发布者到错误通道是有意义的;spring-doc.cadn.net.cn

  • org.springframework.retry.backoff.BackOffPolicyorg.springframework.util.backoff.BackOff。 然而,它并不会直接暴露为一个RetryTemplate选项:而是通过RetryPolicy.Builder以内部API的形式提供配置支持;spring-doc.cadn.net.cn

  • AMPQ、JMS 和 Apache Kafka 通道适配器中的 RetryContext 被替换为内部的 AttributeAccessor 实现。spring-doc.cadn.net.cn

因此,以下项目类已遭受破坏性变更:spring-doc.cadn.net.cn

The RequestHandlerRetryAdvice 被重新构建以尽可能少地依赖外部API。 对于无状态重试逻辑,只需要提供一个 org.springframework.core.retry.RetryPolicy 即可。 有状态重试逻辑是通过 Function<Message<?>, Object> stateKeyFunction 激活的。 由于依赖于 spring-retry API, 因此去掉了 RetryStateGenerator 抽象及其 SpelExpressionRetryStateGenerator 实现。spring-doc.cadn.net.cn

<int:handler-retry-advice> XML 组件的 max-attempts 属性已重命名为 max-retries,以更好地反映此属性背后的逻辑,该逻辑正是关于调用失败处理程序的尝试次数。spring-doc.cadn.net.cn

重试建议以获取更多信息。spring-doc.cadn.net.cn

所有模块现在都遵循标准的包结构。 入站和出站组件分别声明在 inboundoutbound 包中。 channel 包中的实现类为 MessageChannel。 大多数模块从一开始就遵循了这一规则。 本版本的包结构重构包括其余模块:spring-integration-file, spring-integration-ftp, spring-integration-ip, spring-integration-jdbc, spring-integration-jms, spring-integration-jmx, spring-integration-mail, spring-integration-sftp, spring-integration-streamspring-integration-ws。 原本位于根包中的类现已标记为废弃。spring-doc.cadn.net.cn

新组件

一个新的DistributedLock接口已被引入,提供了新的方法1)tryLock(long time, TimeUnit unit, Duration ttl),用于获取具有自定义时间到生命的锁(TTL)。 有关更多信息,请参见分布式锁spring-doc.cadn.net.cn

Jackson 2 支持已被弃用,即将移除。 Jackson 3 现为默认版本,并包含新的组件:JacksonJsonObjectMapperJacksonPropertyAccessorJacksonIndexAccessorJacksonMessagingUtils。 请查看它们的 Javadoc 获取更多信息及迁移路径。spring-doc.cadn.net.cn

The spring-integration-amqp模块现在实现了RabbitMQ AMQP 1.0的支持通道适配器。 专有的AMQP 1.0支持章节提供了更多相关信息。spring-doc.cadn.net.cn

JDBC 更改

The JDBC模块现在通过其专用的org.springframework.integration.jdbc.dsl.Jdbc工厂提供了Java DSL API。 JDBC组件的Java DSL章节提供了更多细节。spring-doc.cadn.net.cn

The JdbcLock 现在支持为锁状态数据自定义时间-to-生活功能。 更多信息,请参阅 JDBC 锁注册表spring-doc.cadn.net.cn

The message stores now use a MESSAGE_CONTENT column name for serialized messages instead of MESSAGE_BYTES since the content might not always be stored as a byte array. All the out-of-the-box SQL schemas have been changed, too, to rely on the MESSAGE_CONTENT name for the respective column in the INT_MESSAGE and INT_CHANNEL_MESSAGE tables. See JDBC消息存储 for more information.spring-doc.cadn.net.cn

The JdbcChannelMessageStore 现在支持 JSON 序列化,作为 Java 序列化的替代方案。 新的组件 JsonChannelMessageStorePreparedStatementSetterJsonMessageRowMapper 允许以 JSON 格式存储消息。 这需要修改数据库架构,使用基于文本的列类型(例如 JSONBJSONTEXTCLOB)来替代二进制类型。 有关更多信息,请参阅 JDBC Channel Message Store JSON Serializationspring-doc.cadn.net.cn

Redis 变更

The RedisLock 现支持自定义锁状态数据的过期时间功能。有关更多信息,请参阅 Redis 锁注册表spring-doc.cadn.net.cn

Hazelcast 变更

此前在spring-integation-hazelcast模块中弃用的类,如LeaderInitiatorHazelcastMembershipListenerHazelcastLocalInstanceRegistrarHazelcastLockRegistry,现在由于Hazelcast库不支持Open Source中的CP-subsystem已被移除。spring-doc.cadn.net.cn

MQTT 变更

The AbstractMqttMessageDrivenChannelAdapterClientManager 实现现在暴露了一个 quiescentTimeout 选项,该选项在其 stop() 方法中向下传递到 MQTT Paho 客户端的 disconnectForcibly() API。 请参阅 MQTT 支持 获取更多详细信息。spring-doc.cadn.net.cn

文件变更

The FileReadingMessageSource 现在可以配置为 SpEL Expressiondirectory 属性。 See 读取文件 获取更多相关信息。spring-doc.cadn.net.cn

远程文件支持变更

The AbstractInboundFileSynchronizer 现在缓存了经过 Session.list(remoteDirectory) 切片处理后的结果。 所以,后来的同步操作只会通过 maxFetchSize 处理缓存,直到缓存被耗尽。 有关更多信息,请参阅 Inbound Channel Adapters: 控制远程文件获取spring-doc.cadn.net.cn

所有AbstractPersistentAcceptOnceFileListFilter实现现在都使用“长文件名”作为元数据条目键。 在此之前,仅使用文件名可能会导致在不同目录中有相同文件名时的元数据覆盖问题。 例如,RotatingServerAdvice可能根据时间戳切换到不同的目录中,但根据业务逻辑,这些文件会带有相同的名称被放置在那里。 有关更多信息,请参阅远程持久性文件列表过滤器spring-doc.cadn.net.cn

空安全

将代码库更新为使用 JSpecify 和 NullAway,添加了一个全面的空安全实现,在包级别使用 @NullMarked 注解默认所有类型为非空,并且使用 @Nullable 注解明确标记可以为空的类型。 请参阅 空安全 以获取更多详细信息。spring-doc.cadn.net.cn

SMB 支持变更

Spring框架的SMB支持模块背后的JCIFS库已升级至3.0.0。 这是一次代码基础的重大重写,并实现了新的包结构。 这是一个破坏性变更,直接引用JCIFS库中的组件需要进行更新。 更多详细信息请参见 SMB支持spring-doc.cadn.net.cn