Changes between 4.2 and 4.3
有关可能影响您应用程序的重要改动,请参见 Migration Guide。您可以在 Wiki 上找到针对 2.1 及更高版本的所有迁移指南。
New Components
4.3 版新增了许多新组件。
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 Adapter和 SFTP Streaming Inbound Channel Adapter。
StreamTransformer
我们添加 StreamTransformer
以将 InputStream
有效负载转换为 byte[]
或 String
。有关详细信息,请参见 Stream Transformer。
Integration Graph
我们添加 IntegrationGraphServer
与 IntegrationGraphController
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.properties
的 spring.integration.messagingAnnotations.require.componentAnnotation
设置为 true
。有关更多信息,请参见 Global Properties 和 Annotation 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-expression
和 socket-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-service
和 watch-events
选项来启用此行为。我们弃用了顶级 WatchServiceDirectoryScanner
,因为它与 API 不一致。有关详细信息,请参阅 WatchServiceDirectoryScanner
。
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_delay
和 amqp_receivedDelay
)。
AMQP-Backed Channels
AMQP 支持的通道现在支持消息映射。有关更多信息,参见 AMQP-backed Message Channels。
Redis Changes
本节介绍对 Spring 集成 Redis 功能做出的常规更改。
[[list-push/pop-direction]]==== 列表入/出方向
以前,队列通道适配器总是固定使用 Redis 列表,将其推入左侧并从右侧读取。你现在可以使用 RedisQueueMessageDrivenEndpoint
和 RedisQueueOutboundChannelAdapter
的 rightPop
和 leftPush
选项分别配置读取和写入方向。有关详细信息,请参阅 Redis Queue Inbound Channel Adapter 和 Redis 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 功能做出的常规更改。
chmod
Changes
SFTP 出站网关(用于 put
和 mput
命令)和 SFTP 出站通道适配器现在支持 chmod
属性,以便在上传后更改远程文件权限。有关更多信息,参见 SFTP Outbound Channel Adapter
和 SFTP Outbound Gateway
。
FTP Changes
本节介绍对 Spring 集成 FTP 功能做出的常规更改。
Session Changes
FtpSession
现在支持 null
以用于 list()
和 listNames()
方法,因为底层 FTP 客户端可以使用它。有了它,您现在可以无需 remoteDirectory
表达式即可配置 FtpOutboundGateway
。您还可以无需 remote-directory
或 remote-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-mapping
和 reply-header-mapping
)现在支持否定模式。有关详细信息,请参阅 AMQP Message Headers、 WS Message Headers 和 XMPP 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。