Changes between 4.1 and 4.2

查看 Migration Guide,了解可能影响你的应用程序的重要更改。你可以在 wiki 上找到所有版本回溯至 2.1 的迁移指南。

New Components

版本 4.2 添加了许多新组件。

Major Management/JMX Rework

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

但是,这对于(某些)用户环境有一些重要影响。

有关完整详细信息,请参见 Metrics and ManagementJMX Improvements

MongoDB Metadata Store

MongoDbMetadataStore 现已发布。有关更多信息,请参见 MongoDB Metadata Store

SecuredChannel Annotation

我们推出了 @SecuredChannel`注释,以取代已弃用的 `ChannelSecurityInterceptorFactoryBean。更多信息,请参见 Security in Spring Integration

SecurityContext Propagation

我们推出了 `SecurityContextPropagationChannelInterceptor`以供从一个消息流程的线程传播到另一个线程以供 `SecurityContext`使用。有关更多信息,请参见 Security in Spring Integration

FileSplitter

在 4.1.2 中,我们添加了 FileSplitter,它将文本文件分割成行。现在它在 int-file: 名称空间中获得了完全支持。有关更多信息,请参见 File Splitter

Zookeeper Support

我们在框架中添加了 Zookeeper 支持以协助在集群或多主机环境中运行。该变更影响以下功能:

  • ZookeeperMetadataStore

  • ZookeeperLockRegistry

  • Zookeeper Leadership

有关更多信息,请参见 Zookeeper Support

Thread Barrier

一个新的线程 <int:barrier/> 组件可用,这允许一个线程在发生某些异步事件之前被挂起。有关更多信息,请参见 Thread Barrier

STOMP Support

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

Codec

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

Message PreparedStatement Setter

一个新的 MessagePreparedStatementSetter 函数式接口回调可用来 JdbcMessageHandler (<int-jdbc:outbound-gateway><int-jdbc:outbound-channel-adapter>),作为使用 SqlParameterSourceFactoryrequestMessage 文本中的参数填充至 PreparedStatement 的替代手段。有关更多信息,请参见 Outbound Channel Adapter

General Changes

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

WireTap

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

File Changes

有关这些更改的更多信息,请参见 File Support

Appending New Lines

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

Ignoring Hidden Files

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

Writing InputStream Payloads

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

HeadDirectoryScanner

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

Last Modified Filter

我们添加了`LastModifiedFileListFilter`。

Watch Service Directory Scanner

我们添加了`WatchServiceDirectoryScanner`。

Persistent File List Filter Changes

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

Class Package Change

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

TCP Changes

本节介绍了 Spring Integration TCP 功能的总体更改。

TCP Serializers

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

Server Socket Exceptions

无论何时在 TCP 服务器套接字上发生意外异常(也已添加到 4.1.3 和 4.0.7),现在都会发布 TcpConnectionServerExceptionEvent 实例。有关更多信息,请参见 TCP Connection Events

TCP Server Port

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

有关更多信息,请参见 "TCP Connection Factories"。

TCP Gateway Remote Timeout

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

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

有关更多信息,请参见 .TCP Outbound Gateway Attributes

TCP SSLSession Available for Header Mapping

TcpConnection 实现现在支持 getSslSession(),让你能够从中提取信息来添加到消息头。有关更多信息,请参见 IP Message Headers

TCP Events

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

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

有关更多信息,请参见 TCP Connection Events

@InboundChannelAdapter Changes

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

API Changes

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

仍然可以为 Promise 网关等功能提供 Reactor 支持。此依赖关系已为不需要此依赖关系的用户移除。

JMS Changes

本节介绍了 Spring Integration TCP 功能的总体更改。

Reply Listener Lazy Initialization

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

Conversion Errors in Message-Driven Endpoints

error-channel 现在用于转换错误。在以前的版本中,错误会引起事务回滚和消息重新传递。

有关更多信息,请参见 Message-driven Channel AdapterInbound Gateway

Default Acknowledge Mode

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

有关更多信息,请参见 Message-driven Channel AdapterInbound Gateway

Shared Subscriptions

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

有关更多信息,请参见 JMS Support

Conditional Pollers

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

有关更多信息,请参见 Conditional Pollers for Message Sources

AMQP Changes

本节介绍了 Spring Integration AMQP 功能的一些一般性更改。

Publisher Confirmations

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

Correlation Data

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

Inbound Gateway Properties

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

有关更多信息,请参见 AMQP Support

XPath Splitter Improvements

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

有关更多信息,请参见 Splitting XML Messages

HTTP Changes

本节介绍了 Spring Integration HTTP 功能的一些一般性更改。

CORS

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

有关更多信息,请参见 Cross-origin Resource Sharing (CORS) Support

Inbound Gateway Timeout

您可以将 HTTP 入站网关配置为在其请求超时时返回指定的错误代码。现在默认为 500 Internal Server Error,而不是 200 OK

有关更多信息,请参见 Response Status Code

Form Data

我们为代理 multipart/form-data 请求添加了文档。有关更多信息,请参见 HTTP Support

Gateway Changes

本部分介绍 Spring Integration Gateway 功能的一般更改。

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

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

MessagingGateway Annotation

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

Aggregator Changes

本部分介绍 Spring Integration 聚合器功能的一般更改。

Aggregator Performance

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

Output Message Group Processor

使用 ref 或内部 Bean 进行聚合时,你现在可以直接绑定 MessageGroupProcessor。此外,我们添加了一个 SimpleMessageGroupProcessor,它返回组中的消息集合。当输出处理器生成一系列 Message<?> 时,聚合器将这些消息逐个释放。配置 SimpleMessageGroupProcessor 使聚合器成为消息障碍,消息将在其中被保留,直到所有消息到达,然后逐个释放。有关更多信息,请参见 Aggregator

FTP and SFTP Changes

本部分介绍 Spring Integration FTP 和 SFTP 功能的一般更改。

Inbound Channel Adapters

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

Gateway Partial Results

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

Delegating Session Factory

我们添加了一个委派会话工厂,它能够根据一些线程上下文值选择一个特定的会话工厂。

有关更多信息,请参阅 Delegating Session FactoryDelegating Session Factory

Default Sftp Session Factory

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

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

有关更多信息,请参见xref:sftp/session-factory.adoc#sftp-unk-keys[allowUnknownKeys:置为`true`以允许连接到具有未知(或已更改)密钥的主机。

Message Session Callback

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

有关更多信息,请参阅 Using MessageSessionCallbackMessageSessionCallback

Websocket Changes

我们将对 WebSocketHandlerDecoratorFactory 的支持添加至 ServerWebSocketContainer,允许对内部 WebSocketHandler 进行链接定制。有关详细信息,请参见 WebSockets Namespace Support

Application Event Adapters changes

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