Changes between 4.1 and 4.2
查看 Migration Guide,了解可能影响你的应用程序的重要更改。你可以在 wiki 上找到所有版本回溯至 2.1 的迁移指南。
New Components
版本 4.2 添加了许多新组件。
Major Management/JMX Rework
我们添加了新的 MetricsFactory
策略接口。此变更与 JMX 和管理基础设施中的其他变更一起,提供了对管理配置和运行时性能的更多控制。
但是,这对于(某些)用户环境有一些重要影响。
有关完整详细信息,请参见 Metrics and Management 和 JMX 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>
),作为使用 SqlParameterSourceFactory
将 requestMessage
文本中的参数填充至 PreparedStatement
的替代手段。有关更多信息,请参见 Outbound Channel Adapter。
General Changes
本节描述了从版本 4.1 到版本 4.2 的一般性变更。
File Changes
有关这些更改的更多信息,请参见 File Support。
Appending New Lines
<int-file:outbound-channel-adapter>
和 <int-file:outbound-gateway>
现在支持 append-new-line
属性。如果设置为 true
,在消息写入后,会将新行追加到文件中。默认属性值为 false
。
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
以前,传入通道适配器上的 @Poller
将 maxMessagesPerPoll
属性的默认值设置为 -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 Adapter 和 Inbound Gateway。
Default Acknowledge Mode
在使用隐式定义的 DefaultMessageListenerContainer
时,默认的 acknowledge
现在是 transacted
。当使用此容器时,我们建议使用 transacted
以避免消息丢失。此默认值现在适用于消息驱动的入站适配器和入站网关。它已经是 JMS 支持的通道的默认值。
有关更多信息,请参见 Message-driven Channel Adapter 和 Inbound Gateway。
Shared Subscriptions
我们为共享订阅(JMS 2.0)在消息驱动端点和 <int-jms:publish-subscribe-channel>
中添加了命名空间支持。以前,您必须将侦听器容器连接成 <bean/>
声明才能使用共享连接。
有关更多信息,请参见 JMS Support。
AMQP Changes
本节介绍了 Spring Integration AMQP 功能的一些一般性更改。
Publisher Confirmations
<int-amqp:outbound-gateway>
现在支持 confirm-correlation-expression
、confirm-ack-channel
和 confirm-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.Transformer
的 output-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 Adapters和 SFTP Adapters。
Gateway Partial Results
当您使用 FTP 或 SFTP 出站网关对多个文件进行操作(使用 mget`和 `mput
)时,可能会在完成请求的一部分后出现异常。如果出现这种情况,将引发包含部分结果的 PartialSuccessException
。有关更多信息,请参阅 FTP Outbound Gateway和 SFTP Outbound Gateway。
Delegating Session Factory
我们添加了一个委派会话工厂,它能够根据一些线程上下文值选择一个特定的会话工厂。
有关更多信息,请参阅 Delegating Session Factory和 Delegating 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 MessageSessionCallback
和 MessageSessionCallback。
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。