如需使用最新稳定版本,请使用 Spring Integration 7.0.4spring-doc.cadn.net.cn

4.3 与 5.0 之间的变更

请参阅 迁移指南 以了解可能影响您应用程序的重要变更。 您可以在 Wiki 上找到从 2.1 版本起所有版本的迁移指南。spring-doc.cadn.net.cn

新组件

版本 5.0 添加了许多新组件。spring-doc.cadn.net.cn

Java DSL

独立的 Spring Integration Java DSL 项目现已合并到核心 Spring Integration 项目中。 通道适配器和网关的 IntegrationComponentSpec 实现已分发到它们各自的模块中。 有关 Java DSL 支持的更多信息,请参见 Java DSL。 此外,请参阅 4.3 到 5.0 迁移指南 以了解迁移到 Spring Integration 5.0 所需的步骤。spring-doc.cadn.net.cn

测试支持

我们创建了一个新的 Spring 集成测试框架,以帮助测试 Spring 集成应用程序。 现在,通过在测试类上添加@SpringIntegrationTest注解以及使用MockIntegration工厂,您可以使集成流的 JUnit 测试变得相对更容易。spring-doc.cadn.net.cn

有关更多信息,请参阅 测试支持spring-doc.cadn.net.cn

MongoDB 出站网关

新的 MongoDbOutboundGateway 允许您通过向其请求通道发送消息,按需对数据库进行查询。spring-doc.cadn.net.cn

有关更多信息,请参见 MongoDB 出站网关spring-doc.cadn.net.cn

WebFlux 网关和通道适配器

我们推出了适用于 Spring WebFlux 框架网关和通道适配器的新 WebFlux 支持模块。spring-doc.cadn.net.cn

有关更多信息,请参阅 WebFlux 支持spring-doc.cadn.net.cn

内容类型转换

现在,当我们使用新的 InvocableHandlerMethod-based 基础设施进行服务方法调用时,我们可以执行从负载到目标方法参数的 contentType 转换。spring-doc.cadn.net.cn

有关更多信息,请参阅内容类型转换spring-doc.cadn.net.cn

ErrorMessagePublisherErrorMessageStrategy

我们添加了 ErrorMessagePublisherErrorMessageStrategy 以创建 ErrorMessage 个实例。spring-doc.cadn.net.cn

有关更多信息,请参阅错误处理spring-doc.cadn.net.cn

JDBC 元数据存储

我们添加了 MetadataStore 实现的 JDBC 实现。 当您需要确保元数据的事务边界时,这非常有用。spring-doc.cadn.net.cn

有关更多信息,请参阅JDBC 元数据存储spring-doc.cadn.net.cn

常规变更

Spring Integration 现在完全基于 Spring Framework 5.0 和 Project Reactor 3.1。 不再支持旧的 Project Reactor 版本。spring-doc.cadn.net.cn

核心变更

The @Poller注解现在具有errorChannel属性,以便更轻松地配置底层的MessagePublishingErrorHandler。 有关更多信息,请参阅注解支持spring-doc.cadn.net.cn

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

The SmartLifecycleRoleController now provides methods to obtain status of endpoints in roles. See Endpoint Roles for more information.spring-doc.cadn.net.cn

默认情况下,POJO 方法现在使用 InvocableHandlerMethod 进行调用,但您可以像以前一样配置它们以使用 SpEL。 有关更多信息,请参阅 POJO 方法调用spring-doc.cadn.net.cn

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

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

基于表达式的聚合器表达式 ReleaseStrategy 现在将表达式针对 MessageGroup 进行评估,而不再仅限于对 Message<?> 的集合进行评估。 有关更多信息,请参阅 聚合器和 Spring 表达式语言 (SpEL)spring-doc.cadn.net.cn

您现在可以使用自定义的JsonObjectMapper来提供ObjectToMapTransformerspring-doc.cadn.net.cn

The @GlobalChannelInterceptor 注解和 <int:channel-interceptor> 现在支持负模式(通过 ! 前缀)以匹配组件名称。 有关更多信息,请参阅 全局通道拦截器配置spring-doc.cadn.net.cn

当候选者未能获取锁时,LockRegistryLeaderInitiator 现在通过 DefaultLeaderEventPublisher 发出一个新的 OnFailedToAcquireMutexEvent。 有关更多信息,请参见 Leadership Event Handlingspring-doc.cadn.net.cn

网关变更

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

The RequestReplyExchanger 接口现在有一个 throws MessagingException 子句,以满足提议的消息交换契约。spring-doc.cadn.net.cn

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

聚合器性能变更

默认情况下,聚合器现在使用SimpleSequenceSizeReleaseStrategy,这在处理大型组时效率更高。 空组现在将在empty-group-min-timeout之后安排移除。 有关更多信息,请参阅聚合器spring-doc.cadn.net.cn

分割器更改

拆分组件现在可以处理并拆分 Java Stream 和响应式流 Publisher 对象。 如果输出通道是一个 ReactiveStreamsSubscribableChannel,则 AbstractMessageSplitter 会为后续迭代构建一个 Flux,而不是常规的 Iterator,这与被拆分的对象无关。 此外,AbstractMessageSplitter 提供了 protected obtainSizeIfPossible() 方法,用于确定 IterableIterator 对象的大小(如果可能的话)。 有关更多信息,请参阅 Splitterspring-doc.cadn.net.cn

JMS 变更

此前,Spring Integration JMS XML 配置为 JMS 连接工厂使用默认 Bean 名称 connectionFactory,允许在组件定义中省略该属性。 我们将其重命名为 jmsConnectionFactory,这是 Spring Boot 用于自动配置 JMS 连接工厂 Bean 的 Bean 名称。spring-doc.cadn.net.cn

如果您的应用程序依赖于之前的行为,您可以将您的 connectionFactory bean 重命名为 jmsConnectionFactory,或者通过使用其当前名称明确配置您的组件以使用该 bean。 有关更多信息,请参阅 JMS 支持spring-doc.cadn.net.cn

邮件变更

已解决渲染 IMAP 邮件内容的一些不一致问题。 有关更多信息,请参阅“邮件接收通道适配器”部分中的说明spring-doc.cadn.net.cn

订阅源更改

代替 ROME 中已弃用的 com.rometools.fetcher.FeedFetcher,我们为 FeedEntryMessageSource 引入了一个新的 Resource 属性。 有关更多信息,请参阅 Feed Adapterspring-doc.cadn.net.cn

文件更改

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

尾部适配器现在支持 idleEventInterval,以便在文件在该时间段内没有数据时触发事件。spring-doc.cadn.net.cn

FileWritingMessageHandler 的刷新谓词现在具有一个附加参数。spring-doc.cadn.net.cn

出站通道适配器与网关(FileWritingMessageHandler)现在支持 REPLACE_IF_MODIFIED FileExistsModespring-doc.cadn.net.cn

它们现在也支持设置新写入文件的权限。spring-doc.cadn.net.cn

一个新的 FileSystemMarkerFilePresentFileListFilter 现已发布。 有关更多信息,请参阅 处理不完整数据spring-doc.cadn.net.cn

The FileSplitter now provides a firstLineAsHeader option to carry the first line of content as a header in the messages emitted for the remaining lines.spring-doc.cadn.net.cn

有关更多信息,请参阅 文件支持spring-doc.cadn.net.cn

FTP 和 SFTP 变更

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

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

您现在可以配置正则表达式和模式过滤器,使其始终通过目录。 当您在出站网关中使用递归时,这可能非常有用。spring-doc.cadn.net.cn

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

FTP 和 SFTP 出站网关现在在获取远程文件时支持 REPLACE_IF_MODIFIEDFileExistsModespring-doc.cadn.net.cn

FTP 和 SFTP 流式传输入站通道适配器现在会在消息头中添加远程文件信息。spring-doc.cadn.net.cn

FTP 和 SFTP 出站通道适配器(以及用于出站网关的 PUT 命令)现在也支持将 InputStream 作为 payloadspring-doc.cadn.net.cn

入站通道适配器现在可以使用新引入的 RecursiveDirectoryScanner 在本地构建文件树。 请参见 FTP 入站通道适配器 部分中的 scanner 选项以进行注入。 此外,您现在也可以将这些适配器切换为 WatchServicespring-doc.cadn.net.cn

我们将 NLST 命令添加到 AbstractRemoteFileOutboundGateway 中,以执行远程列出文件名的命令。spring-doc.cadn.net.cn

您现在可以使用 FtpOutboundGatewayworkingDirExpression 来更改当前请求消息的 FTP 客户端工作目录。spring-doc.cadn.net.cn

The RemoteFileTemplate 现在被提供给 invoke(OperationsCallback<F, T> action),以便在同一个线程绑定的 Session 范围内执行多次 RemoteFileOperations 调用。spring-doc.cadn.net.cn

我们添加了新的过滤器,用于检测不完整的远程文件。spring-doc.cadn.net.cn

The FtpOutboundGateway and SftpOutboundGateway 现在支持一个选项,可通过使用 GETMGET 命令在传输成功后删除远程文件。spring-doc.cadn.net.cn

有关更多信息,请参阅 FTP/FTPS 适配器SFTP 适配器spring-doc.cadn.net.cn

集成属性

版本 4.3.2 新增了一个名为 spring.integration.readOnly.headers 的全局属性,允许您自定义不应被 MessageBuilder 复制到新创建的 Message 中的请求头列表。 有关更多信息,请参阅 全局属性spring-doc.cadn.net.cn

流式更改

我们在 CharacterStreamReadingMessageSource 上添加了一个新选项,使其可用于“管道”stdin,并在管道关闭时发布一个应用程序事件。 有关更多信息,请参见 从流读取spring-doc.cadn.net.cn

屏障变更

The BarrierMessageHandler now supports a discard channel to which late-arriving trigger messages are sent. See Thread Barrier for more information.spring-doc.cadn.net.cn

AMQP 变更

AMQP 出站端点现在支持在使用 RabbitMQ 延迟消息交换插件时设置延迟表达式。spring-doc.cadn.net.cn

入站端点现在支持 Spring AMQP DirectMessageListenerContainerspring-doc.cadn.net.cn

可轮询的 AMQP 后端通道现在会阻塞轮询线程,使其等待配置的 receiveTimeout(默认值:一秒)。spring-doc.cadn.net.cn

现在,消息转换器添加到消息属性中的标题(例如 contentType)将被用于最终消息中。 之前,最终消息中包含哪些标题和消息属性取决于转换器的类型。 要覆盖由转换器设置的标题,请将 headersMappedLast 属性设置为 true。 有关更多信息,请参阅 AMQP 支持spring-doc.cadn.net.cn

HTTP 变更

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

默认情况下,uriVariablesExpression 现在使用 SimpleEvaluationContext(自 5.0.4 版本起)。spring-doc.cadn.net.cn

查看映射 URI 变量以获取更多信息。spring-doc.cadn.net.cn

MQTT 变更

入站消息现在使用 RECEIVED_TOPICRECEIVED_QOSRECEIVED_RETAINED 标头进行映射,以避免在应用程序中继消息时意外传播到出站消息。spring-doc.cadn.net.cn

出站通道适配器现在支持针对主题、QoS 和保留属性的表达式。 默认值保持不变。 有关更多信息,请参阅 MQTT 支持spring-doc.cadn.net.cn

STOMP 变更

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

Web 服务变更

您现在可以使用外部配置的WebServiceTemplate实例来提供WebServiceOutboundGateway个实例。spring-doc.cadn.net.cn

DefaultSoapHeaderMapper 现在可以将 javax.xml.transform.Source 个用户定义的标头映射到 SOAP 标头元素。spring-doc.cadn.net.cn

简单的 WebService 入站和出站网关现在可以将完整的 WebServiceMessage 作为 payload 处理,从而支持对 MTOM 附件的操作。spring-doc.cadn.net.cn

有关更多信息,请参见Web Services 支持spring-doc.cadn.net.cn

Redis 变更

The RedisStoreWritingMessageHandler now provides additional String-based setters for SpEL expressions (to facilitate Java configuration). You can now also configure the zsetIncrementExpression on the RedisStoreWritingMessageHandler. Additionally, this property has been changed from true to false because the INCR option on the ZADD Redis command is optional.spring-doc.cadn.net.cn

您现在可以使用RedisInboundChannelAdapterExecutor来执行 Redis 监听器调用者。 此外,接收到的消息现在包含一个RedisHeaders.MESSAGE_SOURCE头信息,用于指示消息的来源(主题或模式)。spring-doc.cadn.net.cn

有关更多信息,请参阅Redis 支持spring-doc.cadn.net.cn

TCP 变更

我们将一个 ThreadAffinityClientConnectionFactory 添加到绑定 TCP 连接到线程的功能中。spring-doc.cadn.net.cn

您现在可以配置 TCP 连接工厂以支持 PushbackInputStream 个实例,使反序列化器能够在“预读”后“回退”(push back)字节。spring-doc.cadn.net.cn

我们添加了 ByteArrayElasticRawDeserializer 而非 maxMessageSize,以根据需要控制和缓冲传入的数据。spring-doc.cadn.net.cn

有关更多信息,请参阅 TCP 和 UDP 支持spring-doc.cadn.net.cn

JDBC 更改

The JdbcMessageChannelStore 现在为 ChannelMessageStorePreparedStatementSetter 提供了一个 setter,让您能够自定义消息在存储中的插入方式。spring-doc.cadn.net.cn

The ExpressionEvaluatingSqlParameterSourceFactory 现在为 sqlParameterTypes 提供了一个 setter,允许您自定义参数的 SQL 类型。spring-doc.cadn.net.cn

有关更多信息,请参见 JDBC 支持spring-doc.cadn.net.cn

指标变更

Micrometer 应用监控现已支持(自 5.0.2 版本起)。 有关更多信息,请参见 Micrometer 集成spring-doc.cadn.net.cn

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

@EndpointId注解

自 5.0.4 版本起引入,此注解在您使用 Java 配置时提供对 Bean 命名的控制。 有关更多信息,请参阅 端点 Bean 名称spring-doc.cadn.net.cn