4.2 和 4.3 之间的变化

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

新组件

4.3 版本新增了一些组件。

AMQP 异步出站网关

请参阅 异步出站网关

MessageGroupFactory

我们引入了 MessageGroupFactory 策略,以允许控制 MessageGroupStore 逻辑中的 MessageGroup 实例。 我们为 SimpleMessageGroup 添加了 SimpleMessageGroupFactory 实现,其中 GroupType.HASH_SET 作为标准 MessageGroupStore 实现的默认工厂。 有关更多信息,请参阅 消息存储

PersistentMessageGroup

我们为持久 MessageGroupStore 实例添加了 PersistentMessageGroup(延迟加载代理)实现, 当它们的 lazyLoadMessageGroupstrue(默认值)时,它会为 getMessageGroup() 返回此实例。 有关更多信息,请参阅 消息存储

FTP 和 SFTP 流式入站通道适配器

我们添加了入站通道适配器,它们为每个文件返回一个 InputStream,让您无需将远程文件写入本地文件系统即可检索它们。 有关更多信息,请参阅 FTP 流式入站通道适配器SFTP 流式入站通道适配器

StreamTransformer

我们添加了 StreamTransformer,用于将 InputStream 负载转换为 byte[]String。 有关更多信息,请参阅 流转换器

集成图

我们添加了 IntegrationGraphServer,以及 IntegrationGraphController REST 服务,用于将 Spring Integration 应用程序的运行时模型作为图暴露。 有关更多信息,请参阅 集成图

JDBC 锁注册表

我们添加了 JdbcLockRegistry,用于通过数据库表共享的分布式锁。 有关更多信息,请参阅 JDBC 锁注册表

LockRegistryLeaderInitiator

我们添加了基于 LockRegistry 策略的 LeaderInitiator 实现。 有关更多信息,请参阅 领导事件处理

一般性更改

本节描述了 4.3 版本为 Spring Integration 带来的一般性更改。

核心更改

本节描述了 Spring Integration 核心的一般性更改。

链中的出站网关

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

异步服务激活器

我们添加了一个选项,使服务激活器可以同步。 有关更多信息,请参阅 异步服务激活器

消息注解支持更改

消息注解支持不再需要在类级别声明 @MessageEndpoint(或任何其他 @Component)注解。 要恢复以前的行为,请将 spring.integration.propertiesspring.integration.messagingAnnotations.require.componentAnnotation 设置为 true。 有关更多信息,请参阅 全局属性注解支持

邮件更改

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

可自定义的用户标志

可自定义的 userFlag(在 4.2.2 中添加,用于提供用于表示邮件已被 查看的标志的自定义)现在在 XML 命名空间中可用。 有关更多信息,请参阅 Recent 不支持时标记 IMAP 消息

邮件消息映射

您现在可以使用 MessageHeaders 包含邮件头,负载包含电子邮件内容来映射入站邮件消息。 以前,负载始终是原始的 MimeMessage。 有关更多信息,请参阅 入站邮件消息映射

JMS 更改

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

头部映射器

DefaultJmsHeaderMapper 现在通过调用其 toString() 方法将标准 correlationId 头部映射为消息属性。 有关更多信息,请参阅 将消息头部映射到 JMS 消息和从 JMS 消息映射

异步网关

JMS 出站网关现在具有 async 属性。 有关更多信息,请参阅 异步网关

聚合器更改

当 POJO 聚合器释放 Message<?> 对象的集合时,行为有所改变。 这种情况很少见,但如果您的应用程序这样做,您需要对 POJO 进行一些小的更改。 有关更多信息,请参阅此 重要提示:SimpleMessageGroup.getMessages() 方法返回 unmodifiableCollection 注释。

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

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

事件

当服务器连接工厂启动时,会发出一个新的 TcpConnectionServerListeningEvent。 有关更多信息,请参阅 TCP 连接事件

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

流反序列化器

各种反序列化器在整个消息组装完成之前无法分配最终缓冲区,现在支持将接收数据的原始缓冲区进行池化,而不是为每条消息创建和丢弃一个缓冲区。 有关更多信息,请参阅 TCP 连接工厂

TCP 消息映射器

消息映射器现在可以选择性地设置配置的内容类型头部。 有关更多信息,请参阅 IP 消息头部

文件更改

本节描述了 Spring Integration 文件功能的一般性更改。

目标目录创建

FileWritingMessageHandler 生成的文件名可以表示一个子路径,以在目标目录中保存文件的所需目录结构。 有关更多信息,请参阅 生成文件名

FileReadingMessageSource 现在将 WatchService 目录扫描逻辑隐藏在内部类中。 我们添加了 use-watch-servicewatch-events 选项来启用此行为。 由于 API 的不一致性,我们已弃用顶层 WatchServiceDirectoryScanner。 有关更多信息,请参阅 WatchServiceDirectoryScanner

缓冲区大小

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

追加和刷新

您现在可以避免在追加时刷新文件,并使用多种策略在空闲期间刷新数据。 有关更多信息,请参阅 使用 APPEND_NO_FLUSH 时刷新文件

保留时间戳

您现在可以将出站通道适配器配置为设置目标文件的 lastmodified 时间戳。 有关更多信息,请参阅 文件时间戳

分裂器更改

FileSplitter 现在在文件完全读取后自动关闭 FTP 或 SFTP 会话。 这适用于出站网关返回 InputStream 或您使用新的 FTP 或 SFTP 流式通道适配器的情况。 我们还引入了一个新的 markers-json 选项,用于将 FileSplitter.FileMarker 转换为 JSON String,以实现宽松的下游网络交互。 有关更多信息,请参阅 文件分裂器

文件过滤器

我们添加了 ChainFileListFilter 作为 CompositeFileListFilter 的替代方案。 有关更多信息,请参阅 读取文件

AMQP 更改

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

内容类型消息转换器

出站端点现在支持配置了 ContentTypeDelegatingMessageConverterRabbitTemplate, 这样您可以根据消息内容类型选择转换器。 有关更多信息,请参阅 出站消息转换

延迟消息处理的头部

Spring AMQP 1.6 增加了对 延迟消息交换 的支持。 头部映射现在支持此功能使用的头部(amqp_delayamqp_receivedDelay)。

AMQP 支持的通道

AMQP 支持的通道现在支持消息映射。 有关更多信息,请参阅 AMQP 支持的消息通道

Redis 更改

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

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

以前,队列通道适配器始终以固定方向使用 Redis 列表,从左端推入,从右端读取。 您现在可以使用 RedisQueueMessageDrivenEndpointRedisQueueOutboundChannelAdapterrightPopleftPush 选项分别配置读取和写入方向。 有关更多信息,请参阅 Redis 队列入站通道适配器Redis 队列出站通道适配器

队列入站网关默认序列化器

入站网关中的默认序列化器已更改为 JdkSerializationRedisSerializer,以与出站网关兼容。 有关更多信息,请参阅 Redis 队列入站网关

HTTP 更改

以前,对于没有 content-type 头部但有正文的请求(例如 POST),正文会被忽略。 在此版本中,此类请求的内容类型被视为 application/octet-stream,如 RFC 2616 推荐。 有关更多信息,请参阅 Http 入站组件

uriVariablesExpression 现在默认使用 SimpleEvaluationContext(自 4.3.15 起)。 有关更多信息,请参阅 映射 URI 变量

SFTP 更改

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

工厂 Bean

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

chmod 更改

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

FTP 更改

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

会话更改

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

路由器更改

ErrorMessageExceptionTypeRouter 现在支持 Exception 超类映射,以避免在有多个继承者的情况下为同一通道重复。 为此,ErrorMessageExceptionTypeRouter 在初始化期间加载映射类,以便在 ClassNotFoundException 发生时快速失败。

有关更多信息,请参阅 路由器

头部映射

本节描述了 4.2 和 4.3 版本之间头部映射的更改。

一般

AMQP、WS 和 XMPP 头部映射(例如 request-header-mappingreply-header-mapping)现在支持否定模式。 有关更多信息,请参阅 AMQP 消息头部WS 消息头部XMPP 消息头部

AMQP 头部映射

以前,默认情况下只映射标准 AMQP 头部。 您必须明确启用用户定义头部的映射。 在此版本中,默认情况下所有头部都已映射。 此外,入站 amqp_deliveryMode 头部默认不再映射。 有关更多信息,请参阅 AMQP 消息头部

Groovy 脚本

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

@InboundChannelAdapter 更改

@InboundChannelAdapter 现在有一个 channel 属性的别名,用于常规的 value。 此外,目标 SourcePollingChannelAdapter 组件现在可以通过其提供的名称(outputChannelName 选项)以晚绑定方式解析目标 outputChannel bean。 有关更多信息,请参阅 注解支持

XMPP 更改

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

WireTap 晚绑定

WireTap ChannelInterceptor 现在可以接受一个 channelName,该名称稍后在第一个活动拦截器操作期间解析为目标 MessageChannel。 有关更多信息,请参阅 Wire Tap

ChannelMessageStoreQueryProvider 更改

ChannelMessageStoreQueryProvider 现在支持 H2 数据库。 有关更多信息,请参阅 支持消息通道

WebSocket 更改

ServerWebSocketContainer 现在公开了一个 allowedOrigins 选项,SockJsServiceOptions 公开了一个 suppressCors 选项。 有关更多信息,请参阅 WebSockets 支持