4.1 和 4.2 之间的变化

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

新组件

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

主要管理/JMX 重构

我们增加了一个新的 MetricsFactory 策略接口。 这一变化,连同 JMX 和管理基础设施中的其他变化,提供了对管理配置和运行时性能的更多控制。

然而,这对于(某些)用户环境有一些重要的影响。

有关完整详细信息,请参阅 指标和管理JMX 改进

MongoDB 元数据存储

MongoDbMetadataStore 现已可用。 有关更多信息,请参阅 MongoDB 元数据存储

SecuredChannel 注解

我们引入了 @SecuredChannel 注解,取代了已弃用的 ChannelSecurityInterceptorFactoryBean。 有关更多信息,请参阅 Spring Integration 中的安全性

SecurityContext 传播

我们引入了 SecurityContextPropagationChannelInterceptor,用于将 SecurityContext 从一个消息流的线程传播到另一个线程。 有关更多信息,请参阅 Spring Integration 中的安全性

FileSplitter

在 4.1.2 中,我们添加了 FileSplitter,它将文本文件分割成行。 它现在在 int-file: 命名空间中具有完整的支持。 有关更多信息,请参阅 文件分割器

Zookeeper 支持

我们向框架添加了 Zookeeper 支持,以帮助在集群或多主机环境中运行时。 此更改影响以下功能:

  • ZookeeperMetadataStore

  • ZookeeperLockRegistry

  • Zookeeper 领导权

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

线程屏障

一个新的线程 <int:barrier/> 组件可用,允许线程暂停,直到某个异步事件发生。 有关更多信息,请参阅 线程屏障

STOMP 支持

我们向框架添加了 STOMP 支持,作为入站和出站通道适配器对。 有关更多信息,请参阅 STOMP 支持

编解码器

引入了一个新的 Codec 抽象,用于将对象编码和解码为 byte[]。 我们添加了一个使用 Kryo 的实现。 我们还添加了基于编解码器的转换器和消息转换器。 有关更多信息,请参阅 编解码器

消息 PreparedStatement Setter

JdbcMessageHandler (<int-jdbc:outbound-gateway><int-jdbc:outbound-channel-adapter>) 现已提供一个新的 MessagePreparedStatementSetter 函数式接口回调,作为使用 SqlParameterSourceFactoryPreparedStatement 上使用 requestMessage 上下文填充参数的替代方案。 有关更多信息,请参阅 出站通道适配器

一般性更改

本节描述了从版本 4.1 到版本 4.2 的一般性更改。

WireTap

作为现有 selector 属性的替代方案,<wire-tap/> 元素现在支持 selector-expression 属性。

文件更改

有关这些更改的更多信息,请参阅 文件支持

附加新行

<int-file:outbound-channel-adapter><int-file:outbound-gateway> 现在支持 append-new-line 属性。 如果设置为 true,则在写入消息后,会在文件末尾附加一个新行。 默认属性值为 false

忽略隐藏文件

我们为 <int-file:inbound-channel-adapter> 添加了 ignore-hidden 属性,让您可以设置是否从源目录中获取隐藏文件。 它默认为 true

写入 InputStream 有效负载

FileWritingMessageHandler 现在也接受 InputStream 作为有效的消息有效负载类型。

HeadDirectoryScanner

您现在可以将 HeadDirectoryScanner 与其他 FileListFilter 实现一起使用。

最后修改过滤器

我们添加了 LastModifiedFileListFilter

Watch Service 目录扫描器

我们添加了 WatchServiceDirectoryScanner

持久文件列表过滤器更改

AbstractPersistentFileListFilter 有一个新属性 (flushOnUpdate),当设置为 true 时,如果元数据存储实现了 Flushable(例如 PropertiesPersistingMetadataStore),则会调用 flush()

类包更改

我们将 ScatterGatherHandler 类从 org.springframework.integration.handler 移至 org.springframework.integration.scattergather

TCP 更改

本节描述了 Spring Integration TCP 功能的一般更改。

TCP 序列化器

TCP Serializers 不再 flush() OutputStream。 这现在由 TcpNxxConnection 类完成。 如果您在代码中直接使用序列化器,您可能需要 flush() OutputStream

服务器套接字异常

每当 TCP 服务器套接字上发生意外异常时,现在都会发布 TcpConnectionServerExceptionEvent 实例(也添加到 4.1.3 和 4.0.7)。 有关更多信息,请参阅 x4.2-tcp-events

TCP 服务器端口

如果您将 TCP 服务器套接字工厂配置为侦听随机端口,您现在可以使用 getPort() 获取操作系统选择的实际端口。 getServerSocketAddress() 也可用。

有关更多信息,请参阅 "TCP 连接工厂"。

TCP 网关远程超时

TcpOutboundGateway 现在支持 remote-timeout-expression 作为现有 remote-timeout 属性的替代方案。 这允许根据每条消息设置超时。

此外,remote-timeout 不再默认为与 reply-timeout 相同的值,后者具有完全不同的含义。

有关更多信息,请参阅 .TCP 出站网关属性

TCP SSLSession 可用于头部映射

TcpConnection 实现现在支持 getSslSession(),允许您从会话中提取信息以添加到消息头。 有关更多信息,请参阅 IP 消息头

TCP 事件

每当发生关联异常时(例如向不存在的套接字发送消息),现在都会发布新事件。

TcpConnectionEventListeningMessageProducer 已弃用。 请改用通用事件适配器。

有关更多信息,请参阅 x4.2-tcp-events

@InboundChannelAdapter 更改

以前,入站通道适配器上的 @PollermaxMessagesPerPoll 属性默认为 -1(无限)。 这与 <inbound-channel-adapter/> 的 XML 配置不一致,后者默认为 1。 该注解现在将此属性默认为 1

API 更改

o.s.integration.util.FunctionIterator 现在需要 o.s.integration.util.Function 而不是 reactor.function.Function。 这样做是为了消除对 Reactor 不必要的硬依赖。 任何使用此迭代器的地方都需要更改导入。

Reactor 仍然支持 Promise 网关等功能。 对于不需要它的用户,依赖项已被删除。

JMS 更改

本节描述了 Spring Integration TCP 功能的一般更改。

回复监听器延迟初始化

您现在可以将 JMS 出站网关中的回复监听器配置为按需初始化并在空闲一段时间后停止,而不是由网关的生命周期控制。 有关更多信息,请参阅 出站网关

消息驱动端点中的转换错误

error-channel 现在用于转换错误。 在以前的版本中,它们会导致事务回滚和消息重新投递。

有关更多信息,请参阅 消息驱动通道适配器入站网关

默认确认模式

当使用隐式定义的 DefaultMessageListenerContainer 时,默认的 acknowledge 现在是 transacted。 我们建议在使用此容器时使用 transacted,以避免消息丢失。 此默认值现在适用于消息驱动的入站适配器和入站网关。 它已经是 JMS 支持的通道的默认值。

有关更多信息,请参阅 消息驱动通道适配器入站网关

共享订阅

我们为消息驱动端点和 <int-jms:publish-subscribe-channel> 添加了对共享订阅(JMS 2.0)的命名空间支持。 以前,您必须将监听器容器连接为 <bean/> 声明才能使用共享连接。

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

条件轮询器

我们现在为动态轮询提供了更大的灵活性。

有关更多信息,请参阅 x4.2-conditional-pollers

AMQP 更改

本节描述了 Spring Integration AMQP 功能的一般更改。

发布者确认

<int-amqp:outbound-gateway> 现在支持 confirm-correlation-expressionconfirm-ack-channelconfirm-nack-channel 属性(其目的与 <int-amqp:outbound-channel-adapter> 类似)。

关联数据

对于出站通道适配器和入站网关,如果关联数据是 Message<?>,则它将成为 ack 或 nack 通道上消息的基础,并添加了额外的头。 以前,任何关联数据(包括 Message<?>)都作为 ack 或 nack 消息的有效负载返回。

入站网关属性

<int-amqp:inbound-gateway> 现在公开了 amqp-template 属性,以允许对回复 RabbitTemplate 的外部 bean 进行更多控制。 您还可以提供自己的 AmqpTemplate 实现。 此外,如果请求消息没有 replyTo 属性,您可以使用 default-reply-to

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

XPath 分割器改进

XPathMessageSplitter (<int-xml:xpath-splitter>) 现在允许配置内部 javax.xml.transform.Transformeroutput-properties,并支持 XPath 评估 org.w3c.dom.NodeList 结果的 Iterator 模式(默认为 true)。

有关更多信息,请参阅 分割 XML 消息

HTTP 更改

本节描述了 Spring Integration HTTP 功能的一般更改。

CORS

HTTP 入站端点 (<int-http:inbound-channel-adapter><int-http:inbound-gateway>) 现在允许配置 跨域资源共享 (CORS)。

有关更多信息,请参阅 跨域资源共享 (CORS) 支持

入站网关超时

您可以配置 HTTP 入站网关,以便在请求超时时返回您指定的 status code。 默认值现在是 500 Internal Server Error,而不是 200 OK

有关更多信息,请参阅 响应状态码

表单数据

我们添加了代理 multipart/form-data 请求的文档。 有关更多信息,请参阅 HTTP 支持

网关更改

本节描述了 Spring Integration 网关功能的一般更改。

[[gateway-methods-can-return-completablefuture<?>]] ==== 网关方法可以返回 CompletableFuture<?>

当使用 Java 8 时,网关方法现在可以返回 CompletableFuture<?>。 有关更多信息,请参阅 CompletableFuture

MessagingGateway 注解

请求和回复超时属性现在是 String 而不是 Long,以允许使用属性占位符或 SpEL 进行配置。 请参阅 @MessagingGateway 注解

聚合器更改

本节描述了 Spring Integration 聚合器功能的一般更改。

聚合器性能

此版本包含对聚合组件(聚合器、重排序器等)的一些性能改进,通过更有效地从组中删除已释放的消息。 已向消息存储中添加了新方法 (removeMessagesFromGroup)。 设置 removeBatchSize 属性(默认值:100)以调整每次操作中删除的消息数量。 目前,JDBC、Redis 和 MongoDB 消息存储支持此属性。

输出消息组处理器

当使用 ref 或内部 bean 作为聚合器时,您现在可以直接绑定 MessageGroupProcessor。 此外,我们添加了一个 SimpleMessageGroupProcessor,它返回组中的消息集合。 当输出处理器生成 Message<?> 集合时,聚合器会单独释放这些消息。 配置 SimpleMessageGroupProcessor 会使聚合器成为消息屏障,其中消息会一直保持,直到它们全部到达,然后才单独释放。 有关更多信息,请参阅 聚合器

FTP 和 SFTP 更改

本节描述了 Spring Integration FTP 和 SFTP 功能的一般更改。

入站通道适配器

您现在可以在入站通道适配器上指定 remote-directory-expression,以在运行时确定目录。 有关更多信息,请参阅 FTP/FTPS 适配器SFTP 适配器

网关部分结果

当您使用 FTP 或 SFTP 出站网关对多个文件进行操作(使用 mgetmput)时,可能会在请求部分完成后发生异常。 如果发生这种情况,将抛出包含部分结果的 PartialSuccessException。 有关更多信息,请参阅 FTP 出站网关SFTP 出站网关

委托会话工厂

我们添加了一个委托会话工厂,可以根据某些线程上下文值选择特定的会话工厂。

有关更多信息,请参阅 委托会话工厂委托会话工厂

默认 Sftp 会话工厂

以前,DefaultSftpSessionFactory 无条件地允许连接到未知主机。 这现在是可配置的(默认值:false)。

除非 allowUnknownKeys 属性为 true(默认值:false),否则工厂现在需要一个配置的 knownHosts 文件。

消息会话回调

我们引入了 MessageSessionCallback<F, T>,用于在 <int-(s)ftp:outbound-gateway/> 中使用 requestMessage 上下文执行任何自定义 Session 操作。

有关更多信息,请参阅 使用 MessageSessionCallbackMessageSessionCallback

Websocket 更改

我们为 ServerWebSocketContainer 添加了 WebSocketHandlerDecoratorFactory 支持,以允许对内部 WebSocketHandler 进行链式定制。 有关更多信息,请参阅 WebSockets 命名空间支持

应用程序事件适配器更改

ApplicationEvent 适配器现在可以以 payload 作为 event 运行,以直接允许省略自定义 ApplicationEvent 扩展。 为此,在 <int-event:outbound-channel-adapter> 上引入了 publish-payload 布尔属性。 有关更多信息,请参阅 Spring ApplicationEvent 支持