新增功能

对于已经熟悉 Spring Integration 的用户,本章简要概述了 7.0 版本的新功能。

如果您对早期版本中引入的更改和功能感兴趣,请参阅 更改历史

Spring Integration 7.0 有哪些新功能?

有关更多详细信息,请参阅作为 7.0 开发过程一部分解决的 GitHub 问题

总的来说,该项目已迁移到最新的依赖版本。Java 17 仍然是基线,但支持 Java 24。

一般更改

基于 Junit 4 的支持组件已弃用。

该项目现在利用 JSpecify 注解来公开 null 安全 API,并作为其构建的一部分,使用 NullAway 检查这些可空性声明的一致性。

spring-retry 依赖及其所有 API 使用已被 Spring Framework Core 模块中的重试 API 取代。这一重大更改是整个 Spring 生态系统自然演进的结果。总的来说,以下引用已迁移:

  • org.springframework.retry.support.RetryTemplateorg.springframework.core.retry.RetryTemplate

  • org.springframework.retry.RetryPolicyorg.springframework.core.retry.RetryPolicy

  • org.springframework.retry.RecoveryCallbackorg.springframework.integration.core.RecoveryCallback。Spring Framework 中没有 RecoveryCallback 抽象,因为对 RetryException 进行常规的 try..catch 就足够了。对于 Spring Integration,RecoveryCallback 作为向错误通道的死信发布者是有意义的;

  • org.springframework.retry.backoff.BackOffPolicyorg.springframework.util.backoff.BackOff。但是,它没有直接作为 RetryTemplate 选项公开:而是作为通过 RetryPolicy.Builder 配置支持的内部 API;

  • AMPQ、JMS 和 Apache Kafka 通道适配器中的 RetryContext 已被内部 AttributeAccessor 实现替换。

因此,以下项目类发生了重大更改:

  • AmqpBaseInboundChannelAdapterSpec

  • AmqpBaseInboundGatewaySpec

  • AmqpInboundChannelAdapter

  • AmqpInboundGateway

  • PostgresSubscribableChannel

  • ChannelPublishingJmsMessageListener

  • JmsInboundGatewaySpec

  • JmsMessageDrivenChannelAdapterSpec

  • KafkaInboundGatewaySpec

  • KafkaMessageDrivenChannelAdapterSpec

  • KafkaInboundEndpoint

  • KafkaInboundGateway

  • KafkaMessageDrivenChannelAdapter

RequestHandlerRetryAdvice 已重新构建,尽可能避免外部 API。对于无状态重试逻辑,只需提供一个 org.springframework.core.retry.RetryPolicy 就足够了。有状态重试逻辑由 Function<Message<?>, Object> stateKeyFunction 激活。由于依赖于 spring-retry API,RetryStateGenerator 抽象及其 SpelExpressionRetryStateGenerator 实现已被删除。

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

有关更多信息,请参阅 重试建议

所有模块现在都遵循标准包结构。入站和出站组件分别在 inboundoutbound 包中声明。MessageChannel 實现在 channel 包中。大多数模块从第一天起就遵循此规则。此版本中包结构重构包括其余模块:spring-integration-filespring-integration-ftpspring-integration-ipspring-integration-jdbcspring-integration-jmsspring-integration-jmxspring-integration-mailspring-integration-sftpspring-integration-streamspring-integration-ws。根包中的类现在标记为已弃用。

新组件

引入了一个新的 DistributedLock 接口,提供了新方法 lock(Duration ttl)tryLock(long time, TimeUnit unit, Duration ttl),以获取具有自定义生存时间 (TTL) 的锁。有关更多信息,请参阅 分布式锁

Jackson 2 支持已弃用并将移除。Jackson 3 现在是默认设置,并引入了新组件:JacksonJsonObjectMapperJacksonPropertyAccessorJacksonIndexAccessorJacksonMessagingUtils。有关更多信息,请参阅它们的 Javadoc,并查阅已弃用类以获取迁移路径。

spring-integration-amqp 模块现在实现用于 RabbitMQ AMQP 1.0 支持的通道适配器。专门的 AMQP 1.0 支持 章提供了更多信息。

JDBC 更改

JDBC 模块现在通过其专用的 org.springframework.integration.jdbc.dsl.Jdbc 工厂提供 Java DSL API。JDBC 组件的 Java DSL 章提供了更多详细信息。

JdbcLock 现在支持自定义锁状态数据生存时间的功能。有关更多信息,请参阅 JDBC 锁注册表

消息存储现在使用 MESSAGE_CONTENT 列名来存储序列化消息,而不是 MESSAGE_BYTES,因为内容可能不总是作为字节数组存储。所有开箱即用的 SQL 模式也已更改,以在 INT_MESSAGEINT_CHANNEL_MESSAGE 表中依赖 MESSAGE_CONTENT 名称作为相应列。有关更多信息,请参阅 JDBC 消息存储

JdbcChannelMessageStore 现在支持 JSON 序列化作为 Java 序列化的替代方案。新的组件 JsonChannelMessageStorePreparedStatementSetterJsonMessageRowMapper 允许以 JSON 格式存储消息。这需要修改数据库模式以使用基于文本的列类型(如 JSONBJSONTEXTCLOB)而不是二进制类型。有关更多信息,请参阅 JDBC 通道消息存储 JSON 序列化

Redis 更改

RedisLock 现在支持自定义锁状态数据生存时间的功能。有关更多信息,请参阅 Redis 锁注册表

Hazelcast 更改

之前在 spring-integration-hazelcast 模块中已弃用的类,如 LeaderInitiatorHazelcastMembershipListenerHazelcastLocalInstanceRegistrarHazelcastLockRegistry,由于 Hazelcast 开源库不支持 CP 子系统,现已移除。

MQTT 更改

AbstractMqttMessageDrivenChannelAdapterClientManager 实现现在公开了一个 quiescentTimeout 选项,该选项在其 stop() 方法中传播到 MQTT Paho 客户端的 disconnectForcibly() API。有关更多信息,请参阅 MQTT 支持

文件更改

FileReadingMessageSource 现在可以使用 SpEL Expression 配置其 directory 属性。有关更多信息,请参阅 读取文件

远程文件支持更改

AbstractInboundFileSynchronizer 现在会在按 maxFetchSize 切片后缓存 Session.list(remoteDirectory) 的过滤结果。因此,后续同步仅处理缓存中的 maxFetchSize,直到缓存耗尽。有关更多信息,请参阅 入站通道适配器:控制远程文件获取

所有 AbstractPersistentAcceptOnceFileListFilter 实现现在都使用“长文件名”作为元数据条目键。以前,仅文件名可能导致当同一过滤器用于具有相同文件名的不同目录时元数据覆盖问题。例如,RotatingServerAdvice 可能会根据时间戳切换目录,但文件根据业务逻辑以相同名称放置在那里。有关更多信息,请参阅 远程持久文件列表过滤器

空安全

更新了代码库以使用 JSpecify 和 NullAway,添加了全面的空安全实现,该实现使用 @NullMarked 注解将所有类型默认为包级别的非空,并使用 @Nullable 注解明确标记可以为空的类型。有关更多信息,请参阅 空安全

SMB 支持更改

SMB 支持模块背后的 JCIFS 库已升级到 3.0.0。这是代码库的重大重写,并实现了新的包结构。这是一个重大更改,对 JCIFS 库组件的直接引用需要更新。有关更多信息,请参阅 SMB 支持

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