4.3 和 5.0 之间的变化

请参阅 迁移指南,了解可能影响您应用程序的重要更改。 您可以在 wiki 上找到所有版本(从 2.1 开始)的迁移指南。

新组件

5.0 版本增加了一些新组件。

Java DSL

独立的 Spring Integration Java DSL 项目现已合并到核心 Spring Integration 项目中。 通道适配器和网关的 IntegrationComponentSpec 实现已分发到其特定的模块。 有关 Java DSL 支持的更多信息,请参阅 Java DSL。 另请参阅 4.3 到 5.0 迁移指南,了解迁移到 Spring Integration 5.0 所需的步骤。

测试支持

我们创建了一个新的 Spring Integration 测试框架,以帮助测试 Spring Integration 应用程序。 现在,通过在测试类上使用 @SpringIntegrationTest 注解和 MockIntegration 工厂,您可以使集成流的 JUnit 测试变得更容易。

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

MongoDB 出站网关

新的 MongoDbOutboundGateway 允许您通过向其请求通道发送消息来按需查询数据库。

有关更多信息,请参阅 MongoDB 出站网关

WebFlux 网关和通道适配器

我们为 Spring WebFlux 框架网关和通道适配器引入了新的 WebFlux 支持模块。

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

内容类型转换

现在我们使用基于 InvocableHandlerMethod 的新基础设施进行服务方法调用,我们可以执行 contentType 从有效负载到目标方法参数的转换。

有关更多信息,请参阅 内容类型转换

ErrorMessagePublisherErrorMessageStrategy

我们添加了 ErrorMessagePublisherErrorMessageStrategy 用于创建 ErrorMessage 实例。

有关更多信息,请参阅 错误处理

JDBC 元数据存储

我们添加了 MetadataStore 实现的 JDBC 实现。 当您需要确保元数据的事务边界时,这很有用。

有关更多信息,请参阅 JDBC 元数据存储

一般变更

Spring Integration 现在完全基于 Spring Framework 5.0 和 Project Reactor 3.1。 不再支持以前的 Project Reactor 版本。

核心变更

@Poller 注解现在具有 errorChannel 属性,以便更轻松地配置底层 MessagePublishingErrorHandler。 有关更多信息,请参阅 注解支持

所有请求-回复端点(基于 AbstractReplyProducingMessageHandler)现在都可以启动事务,从而使整个下游流具有事务性。 有关更多信息,请参阅 事务支持

SmartLifecycleRoleController 现在提供获取角色中端点状态的方法。 有关更多信息,请参阅 端点角色

默认情况下,POJO 方法现在使用 InvocableHandlerMethod 调用,但您可以像以前一样将它们配置为使用 SpEL。 有关更多信息,请参阅 POJO 方法调用

当将 POJO 方法作为消息处理器时,您现在可以使用 @Default 注解标记其中一个服务方法,以提供非匹配条件的后备机制。 有关更多信息,请参阅 配置服务激活器

我们添加了一个简单的 PassThroughTransactionSynchronizationFactory,以始终将轮询消息存储在当前事务上下文中。 该消息用作 MessagingExceptionfailedMessage 属性,它包装在事务完成期间抛出的任何原始异常。 有关更多信息,请参阅 事务同步

聚合器基于表达式的 ReleaseStrategy 现在针对 MessageGroup 而不是仅仅针对 Message<?> 集合评估表达式。 有关更多信息,请参阅 聚合器和 Spring 表达式语言 (SpEL)

您现在可以为 ObjectToMapTransformer 提供一个自定义的 JsonObjectMapper

有关更多信息,请参阅 聚合器和 Spring 表达式语言 (SpEL)

@GlobalChannelInterceptor 注解和 <int:channel-interceptor> 现在支持通过 ! 前缀表示的否定模式,用于组件名称匹配。 有关更多信息,请参阅 全局通道拦截器配置

当候选者未能获取锁时,LockRegistryLeaderInitiator 现在通过 DefaultLeaderEventPublisher 发出新的 OnFailedToAcquireMutexEvent。 有关更多信息,请参阅 领导事件处理

网关变更

当网关方法具有 void 返回类型并提供了错误通道时,网关现在会正确设置 errorChannel 头。 以前,该头未填充。 这导致同步下游流(在调用线程上运行)将异常发送到配置的通道,但异步下游流上的异常将发送到默认的 errorChannel

RequestReplyExchanger 接口现在具有 throws MessagingException 子句,以满足提议的消息交换契约。

您现在可以使用 SpEL 表达式指定请求和回复超时。 有关更多信息,请参阅 消息网关

聚合器性能变更

默认情况下,聚合器现在使用 SimpleSequenceSizeReleaseStrategy,它效率更高,尤其是在大型组中。 空组现在在 empty-group-min-timeout 后安排删除。 有关更多信息,请参阅 聚合器

分裂器变更

分裂器组件现在可以处理和分裂 Java Stream 和 Reactive Streams Publisher 对象。 如果输出通道是 ReactiveStreamsSubscribableChannel,则 AbstractMessageSplitter 会为后续迭代构建一个 Flux 而不是常规的 Iterator,这与被分裂的对象无关。 此外,AbstractMessageSplitter 提供了 protected obtainSizeIfPossible() 方法,如果可能的话,可以确定 IterableIterator 对象的大小。 有关更多信息,请参阅 分裂器

JMS 变更

以前,Spring Integration JMS XML 配置使用 connectionFactory 作为 JMS 连接工厂的默认 bean 名称,允许从组件定义中省略该属性。 我们将其重命名为 jmsConnectionFactory,这是 Spring Boot 用于自动配置 JMS 连接工厂 bean 的 bean 名称。

如果您的应用程序依赖于以前的行为,您可以将您的 connectionFactory bean 重命名为 jmsConnectionFactory,或者通过使用其当前名称专门配置您的组件以使用您的 bean。 有关更多信息,请参阅 JMS 支持

邮件变更

已解决渲染 IMAP 邮件内容的一些不一致问题。 有关更多信息,请参阅 邮件接收通道适配器”部分中的注释

Feed 变更

我们引入了 FeedEntryMessageSource 的新 Resource 属性,而不是 ROME 中已弃用的 com.rometools.fetcher.FeedFetcher。 有关更多信息,请参阅 Feed 适配器

文件变更

我们引入了新的 FileHeaders.RELATIVE_PATH 消息头,用于在 FileReadingMessageSource 中表示相对路径。

尾部适配器现在支持 idleEventInterval,以便在该期间文件中没有数据时发出事件。

FileWritingMessageHandler 的刷新谓词现在有一个附加参数。

文件出站通道适配器和网关 (FileWritingMessageHandler) 现在支持 REPLACE_IF_MODIFIED FileExistsMode

它们现在还支持设置新写入文件的文件权限。

现在可以使用新的 FileSystemMarkerFilePresentFileListFilter。 有关更多信息,请参阅 处理不完整数据

FileSplitter 现在提供 firstLineAsHeader 选项,将内容的第一行作为消息头,用于剩余行发出的消息。

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

FTP 和 SFTP 变更

入站通道适配器现在有一个名为 max-fetch-size 的属性,用于限制在轮询期间(当本地目录中没有文件时)获取的文件数量。 默认情况下,它们还配置了一个 FileSystemPersistentAcceptOnceFileListFilterlocal-filter 中。

您还可以通过设置新引入的 scanner 属性,为入站通道适配器提供自定义的 DirectoryScanner 实现。

您现在可以配置正则表达式和模式过滤器,以始终传递目录。 当您在出站网关中使用递归时,这可能很有用。

默认情况下,所有入站通道适配器(流式和基于同步的)现在都使用适当的 AbstractPersistentAcceptOnceFileListFilter 实现,以防止远程文件的重复下载。

FTP 和 SFTP 出站网关现在在获取远程文件时支持 REPLACE_IF_MODIFIED FileExistsMode

FTP 和 SFTP 流式入站通道适配器现在在消息头中添加远程文件信息。

FTP 和 SFTP 出站通道适配器(以及出站网关的 PUT 命令)现在也支持 InputStream 作为 payload

入站通道适配器现在可以使用新引入的 RecursiveDirectoryScanner 在本地构建文件树。 有关注入,请参阅 FTP 入站通道适配器 部分中的 scanner 选项。 此外,您现在可以将这些适配器切换到 WatchService

我们将 NLST 命令添加到 AbstractRemoteFileOutboundGateway 以执行列表文件名称远程命令。

您现在可以为 FtpOutboundGateway 提供 workingDirExpression,以更改当前请求消息的 FTP 客户端工作目录。

RemoteFileTemplate 现在提供 invoke(OperationsCallback<F, T> action) 以在同一线程绑定的 Session 范围内执行多个 RemoteFileOperations 调用。

我们添加了用于检测不完整远程文件的新过滤器。

FtpOutboundGatewaySftpOutboundGateway 现在支持一个选项,在成功传输(使用 GETMGET 命令)后删除远程文件。

有关更多信息,请参阅 FTP/FTPS 适配器SFTP 适配器

集成属性

4.3.2 版本添加了一个新的 spring.integration.readOnly.headers 全局属性,允许您自定义不应由 MessageBuilder 复制到新创建的 Message 的头列表。 有关更多信息,请参阅 全局属性

流变更

我们在 CharacterStreamReadingMessageSource 上添加了一个新选项,允许它用于“管道”stdin 并在管道关闭时发布应用程序事件。 有关更多信息,请参阅 从流中读取

屏障变更

BarrierMessageHandler 现在支持一个丢弃通道,迟到的触发消息将发送到该通道。 有关更多信息,请参阅 线程屏障

AMQP 变更

当您使用 RabbitMQ 延迟消息交换插件时,AMQP 出站端点现在支持设置延迟表达式。

入站端点现在支持 Spring AMQP DirectMessageListenerContainer

可轮询的 AMQP 支持通道现在会阻塞轮询器线程,直到轮询器配置的 receiveTimeout(默认:一秒)。

消息转换器添加到消息属性中的头(例如 contentType)现在用于最终消息。 以前,它取决于转换器类型,以确定哪些头和消息属性出现在最终消息中。 要覆盖转换器设置的头,请将 headersMappedLast 属性设置为 true。 有关更多信息,请参阅 AMQP 支持

HTTP 变更

默认情况下,DefaultHttpHeaderMapper.userDefinedHeaderPrefix 属性现在是空字符串而不是 X-。 有关更多信息,请参阅 HTTP 头映射

默认情况下,uriVariablesExpression 现在使用 SimpleEvaluationContext(自 5.0.4 起)。

有关更多信息,请参阅 映射 URI 变量

MQTT 变更

入站消息现在映射有 RECEIVED_TOPICRECEIVED_QOSRECEIVED_RETAINED 头,以避免在应用程序中继消息时无意中传播到出站消息。

出站通道适配器现在支持主题、qos 和保留属性的表达式。 默认值保持不变。 有关更多信息,请参阅 MQTT 支持

STOMP 变更

我们将 STOMP 模块更改为使用 ReactorNettyTcpStompClient,它基于 Project Reactor 3.1reactor-netty 扩展。 我们根据 ReactorNettyTcpStompClient 基础将 Reactor2TcpStompSessionManager 重命名为 ReactorNettyTcpStompSessionManager。 有关更多信息,请参阅 STOMP 支持

Web 服务变更

您现在可以为 WebServiceOutboundGateway 实例提供外部配置的 WebServiceTemplate 实例。

DefaultSoapHeaderMapper 现在可以将 javax.xml.transform.Source 用户定义头映射到 SOAP 头元素。

简单的 WebService 入站和出站网关现在可以将完整的 WebServiceMessage 作为 payload 处理,允许操作 MTOM 附件。

有关更多信息,请参阅 Web 服务支持

Redis 变更

RedisStoreWritingMessageHandler 现在提供了额外的基于 String 的 SpEL 表达式设置器(为了方便 Java 配置)。 您现在还可以在 RedisStoreWritingMessageHandler 上配置 zsetIncrementExpression。 此外,此属性已从 true 更改为 false,因为 ZADD Redis 命令上的 INCR 选项是可选的。

您现在可以为 RedisInboundChannelAdapter 提供一个 Executor,用于执行 Redis 监听器调用器。 此外,接收到的消息现在包含 RedisHeaders.MESSAGE_SOURCE 头,以指示消息的来源(主题或模式)。

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

TCP 变更

我们添加了一个新的 ThreadAffinityClientConnectionFactory,用于将 TCP 连接绑定到线程。

您现在可以配置 TCP 连接工厂以支持 PushbackInputStream 实例,允许反序列化器在“预读”后“未读”(推回)字节。

我们添加了一个没有 maxMessageSizeByteArrayElasticRawDeserializer,以根据需要控制和缓冲传入数据。

有关更多信息,请参阅 TCP 和 UDP 支持

JDBC 变更

JdbcMessageChannelStore 现在提供了 ChannelMessageStorePreparedStatementSetter 的设置器,允许您自定义存储中的消息插入。

ExpressionEvaluatingSqlParameterSourceFactory 现在提供了 sqlParameterTypes 的设置器,允许您自定义参数的 SQL 类型。

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

指标变更

Micrometer 应用程序监控现在受支持(自 5.0.2 版本起)。 有关更多信息,请参阅 Micrometer 集成

在 5.0.3 版本中对 Micrometer Meters 进行了更改,使其更适合在维度系统中使用。 在 5.0.4 中进行了进一步的更改。 如果您使用 Micrometer,我们建议至少使用 5.0.4 版本。

@EndpointId 注解

此注解在 5.0.4 版本中引入,在使用 Java 配置时提供对 bean 命名的控制。 有关更多信息,请参阅 端点 Bean 名称