Changes between 4.2 and 4.3

有关可能影响您应用程序的重要改动,请参见 Migration Guide。您可以在 Wiki 上找到针对 2.1 及更高版本的所有迁移指南。

New Components

4.3 版新增了许多新组件。

AMQP Async Outbound Gateway

MessageGroupFactory

我们引入了 `MessageGroupFactory`策略来允许在 `MessageGroupStore`逻辑中控制 `MessageGroup`实例。我们为 `SimpleMessageGroup`添加了 `SimpleMessageGroupFactory`实现,`GroupType.HASH_SET`是标准 `MessageGroupStore`实现的默认工厂。有关详细信息,请参阅 Message Store

PersistentMessageGroup

我们为持久性 MessageGroupStore`实例添加了 `PersistentMessageGroup(延迟加载代理)实现,当其 lazyLoadMessageGroups`为 `true(默认值)时,在 `getMessageGroup()`时为其返回此实例。有关详细信息,请参阅 Message Store

FTP and SFTP Streaming Inbound Channel Adapters

我们添加返回每个文件的 `InputStream`的入站通道适配器,使你无需将其写入本地文件系统即可检索远程文件。有关详细信息,请参阅 FTP Streaming Inbound Channel AdapterSFTP Streaming Inbound Channel Adapter

StreamTransformer

我们添加 StreamTransformer 以将 InputStream 有效负载转换为 byte[]String。有关详细信息,请参见 Stream Transformer

Integration Graph

我们添加 IntegrationGraphServerIntegrationGraphController REST 服务一起,以将 Spring Integration 应用程序的运行时模型公开为图形。有关详细信息,请参见 Integration Graph

JDBC Lock Registry

我们添加 JdbcLockRegistry 用于通过数据库表共享的分布式锁。有关详细信息,请参见 JDBC Lock Registry

LeaderInitiator for LockRegistry

我们添加基于 LockRegistry 策略的 LeaderInitiator 实现。有关详细信息,请参见 Leadership Event Handling

General Changes

本节介绍 4.3 版为 Spring Integration 带来的总体变更。

Core Changes

本节介绍 Spring Integration 核心的一般变更。

Outbound Gateway within a Chain

先前,你可以在链中的出站网关上指定一个 reply-channel。它被完全忽略。网关的回复会发送到下一个链元素,或者如果网关是最后一个元素,则发送到链的输出通道。此条件现在已检测到并禁止。如果你有这样的配置,请移除 reply-channel

Asynchronous Service Activator

我们添加一个选项,使服务激活成为同步的。有关详细信息,请参见 Asynchronous Service Activator

Messaging Annotation Support changes

消息注释支持不需要在类级别上声明 @MessageEndpoint (或任何其他 @Component)注释。要恢复以前的行为,将 spring.integration.propertiesspring.integration.messagingAnnotations.require.componentAnnotation 设置为 true。有关更多信息,请参见 Global PropertiesAnnotation Support

Mail Changes

本节介绍 Spring Integration Mail 功能的常规更改。

Customizable User Flag

可自定义的 userFlag(在 4.2.2 中添加,用于自定义标记以表示已看到邮件)现可在 XML 命名空间中获得。有关详细信息,请参见 Marking IMAP Messages When Recent Is Not Supported

Mail Message Mapping

您现在可以使用包含邮件标头和包含电子邮件内容的有效负载的 MessageHeaders 映射入站邮件消息。以前,有效负载始终是原始 MimeMessage。有关详细信息,请参见 Inbound Mail Message Mapping

JMS Changes

本节介绍 Spring Integration JMS 功能的常规更改。

Header Mapper

DefaultJmsHeaderMapper 现通过调用其 toString() 方法将标准 correlationId 标头映射为消息属性。有关详细信息,请参见 Mapping Message Headers to and from JMS Message

Asynchronous Gateway

JMS 出站网关现有一个 async 属性。有关详细信息,请参见 Async Gateway

Aggregator Changes

POJO 聚合器释放 Message<?> 对象的集合时,行为发生了变化。这种情况很少发生,但如果您的应用程序执行此操作,则需要对您的 POJO 进行小改动。有关详细信息,请参见此 IMPORTANT: The SimpleMessageGroup.getMessages() method returns an unmodifiableCollection. 备注。

[[tcp/udp-changes]]=== TCP/UDP 更改

本节介绍 Spring Integration TCP/UDP 功能的常规更改。

Events

启动服务器连接工厂时会发出一个新的 TcpConnectionServerListeningEvent。有关详细信息,请参见 TCP Connection Events

您现在可以在 <int-ip:udp-outbound-channel-adapter> 上使用 destination-expressionsocket-expression 属性。有关更多信息,请参见 UDP Adapters

Stream Deserializers

直到组装整个消息后才能分配最终缓冲区的各种反序列化器现在支持将接收数据的原始缓冲区放入池中,而不是为每条消息创建并丢弃一个缓冲区。有关更多信息,请参见 TCP Connection Factories

TCP Message Mapper

消息映射器现在会根据选择设置一个已配置的内容类型标头。有关更多信息,请参见 IP Message Headers

File Changes

本节介绍 Spring Integration 文件功能的常规更改。

Destination Directory Creation

FileWritingMessageHandler 的生成文件名可以表示子路径,以便在目标目录中保存文件所需的目录结构。有关详细信息,请参见 Generating File Names

FileReadingMessageSource 现在将 WatchService 目录扫描逻辑隐藏在内部类中。我们增加了 use-watch-servicewatch-events 选项来启用此行为。我们弃用了顶级 WatchServiceDirectoryScanner,因为它与 API 不一致。有关详细信息,请参阅 WatchServiceDirectoryScanner

Buffer Size

现在,你可以指定在写入文件时的缓冲区大小。

Appending and Flushing

你现在可以避免在追加时刷新文件,并使用多种策略在闲置期间刷新数据。有关详细信息,请参阅 Flushing Files When Using APPEND_NO_FLUSH

Preserving Timestamps

你现在可以配置出站通道适配器以设置目标文件的 lastmodified 时间戳。有关详细信息,请参阅 File Timestamps

Splitter Changes

当文件完全读取时,FileSplitter 现在会自动关闭 FTP 或 SFTP 会话。当出站网关返回 InputStream 或使用新的 FTP 或 SFTP 流式信道适配器时,此规则适用。我们还引入了新的 markers-json 选项,以将 FileSplitter.FileMarker 转换为 JSON String,以缓解下游网络交互。有关更多信息,请参见 File Splitter

File Filters

我们添加了 ChainFileListFilter 作为 CompositeFileListFilter 的替代。有关更多信息,请参见 Reading Files

AMQP Changes

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

Content Type Message Converter

出站端点现在支持使用 RabbitTemplate 配置的 ContentTypeDelegatingMessageConverter,以便您可以根据消息内容类型选择转换器。有关更多信息,参见 Outbound Message Conversion

Headers for Delayed Message Handling

Spring AMQP 1.6 添加了对 delayed message exchanges 的支持。标头映射现在支持此功能使用的标头 (amqp_delayamqp_receivedDelay)。

AMQP-Backed Channels

AMQP 支持的通道现在支持消息映射。有关更多信息,参见 AMQP-backed Message Channels

Redis Changes

本节介绍对 Spring 集成 Redis 功能做出的常规更改。

[[list-push/pop-direction]]==== 列表入/出方向

以前,队列通道适配器总是固定使用 Redis 列表,将其推入左侧并从右侧读取。你现在可以使用 RedisQueueMessageDrivenEndpointRedisQueueOutboundChannelAdapterrightPopleftPush 选项分别配置读取和写入方向。有关详细信息,请参阅 Redis Queue Inbound Channel AdapterRedis Queue Outbound Channel Adapter

Queue Inbound Gateway Default Serializer

入站网关中的默认序列化程序已更改为 JdkSerializationRedisSerializer,以与出站网关兼容。有关详细信息,请参阅 Redis Queue Inbound Gateway

HTTP Changes

以前,对于具有正文的请求(例如 POST)没有 content-type 标头的请求将被忽略。通过此发行,此类请求的内容类型被视为 application/octet-stream,如 RFC 2616 所建议的。有关更多信息,参见 Http Inbound Components

uriVariablesExpression 现在在默认情况下使用 SimpleEvaluationContext(自 4.3.15 起)。有关详细信息,请参阅 Mapping URI Variables

SFTP Changes

本节介绍对 Spring 集成 SFTP 功能做出的常规更改。

Factory Bean

我们添加了一个新的工厂 Bean,以简化 SFTP 的 Jsch 代理的配置。更多信息,请参阅 JschProxyFactoryBean

chmod Changes

SFTP 出站网关(用于 putmput 命令)和 SFTP 出站通道适配器现在支持 chmod 属性,以便在上传后更改远程文件权限。有关更多信息,参见 SFTP Outbound Channel AdapterSFTP Outbound Gateway

FTP Changes

本节介绍对 Spring 集成 FTP 功能做出的常规更改。

Session Changes

FtpSession 现在支持 null 以用于 list()listNames() 方法,因为底层 FTP 客户端可以使用它。有了它,您现在可以无需 remoteDirectory 表达式即可配置 FtpOutboundGateway。您还可以无需 remote-directoryremote-directory-expression 配置 <int-ftp:inbound-channel-adapter>。有关更多信息,参见 FTP/FTPS Adapters

Router Changes

ErrorMessageExceptionTypeRouter 现在支持 Exception 超类映射,以避免在多个继承者的情况下为同一路由进行重复。为了这个目的,ErrorMessageExceptionTypeRouter 在初始化期间加载映射类,以针对 ClassNotFoundException 快速失败。

有关更多信息,参见 Routers

Header Mapping

这一部分描述了从 4.2 版到 4.3 版的头映射所做的更改。

General

AMQP、WS 和 XMPP 标头映射(例如 request-header-mappingreply-header-mapping)现在支持否定模式。有关详细信息,请参阅 AMQP Message HeadersWS Message HeadersXMPP Message Headers

AMQP Header Mapping

以前,默认情况下只映射标准 AMQP 标头。您必须显式启用用户定义标头的映射。通过此发行,默认情况下所有标头都被映射。此外,入站 amqp_deliveryMode 标头不再默认映射。有关更多信息,参见 AMQP Message Headers

Groovy Scripts

你现在可以使用 compile-static 提示或任何其他 CompilerConfiguration 选项配置 groovy 脚本。有关详细信息,请参阅 Groovy Configuration

@InboundChannelAdapter Changes

@InboundChannelAdapter 现在有一个别名 channel 属性,用于常规 value。此外,目标 SourcePollingChannelAdapter 组件现在可以按延迟绑定方式从其提供的名称(outputChannelName 选项)中解析目标 outputChannel Bean。有关更多信息,参见 Annotation Support

XMPP Changes

XMPP 通道适配器现在支持 XMPP 扩展 (XEP)。有关详细信息,请参阅 XMPP Extensions

WireTap Late Binding

WireTap ChannelInterceptor 现在可以接受一个 channelName,它将在第一个活动拦截器操作期间解析为目标 MessageChannel。有关详细信息,请参阅 Wire Tap

ChannelMessageStoreQueryProvider Changes

ChannelMessageStoreQueryProvider 现在支持 H2 数据库。有关详细信息,请参阅 Backing Message Channels

WebSocket Changes

ServerWebSocketContainer 现在公开了 allowedOrigins 选项,而 SockJsServiceOptions 公开了 suppressCors 选项。有关更多信息,参见 WebSockets Support