4.3 和 5.0 之间的更改
新组件
版本 5.0 添加了许多新组件。
Java DSL
单独的 Spring Integration Java DSL 项目现在已经合并到核心 Spring Integration 项目中。
这IntegrationComponentSpec
通道适配器和网关的实现被分发到它们的特定模块。
有关 Java DSL 支持的更多信息,请参阅 Java DSL。
另请参阅 4.3 到 5.0 迁移指南,了解迁移到 Spring Integration 5.0 所需的步骤。
测试支持
我们创建了一个新的 Spring 集成测试框架来帮助测试 Spring 集成应用程序。
现在,使用@SpringIntegrationTest
注解和MockIntegration
工厂,您可以使集成流的 JUnit 测试更加容易。
有关更多信息,请参阅测试支持。
内容类型转换
现在,我们使用了新的InvocableHandlerMethod
的基础设施,我们可以执行contentType
从 payload 到 Target 方法参数的转换。
有关更多信息,请参阅 内容类型转换 。
ErrorMessagePublisher
和ErrorMessageStrategy
我们添加了ErrorMessagePublisher
和ErrorMessageStrategy
用于创建ErrorMessage
实例。
有关更多信息,请参阅错误处理。
一般更改
Spring 集成现在完全基于 Spring 框架5.0
和 Project Reactor3.1
.
以前的 Project Reactor 版本不再受支持。
核心变更
这@Poller
注解现在具有errorChannel
属性,以便更轻松地配置底层MessagePublishingErrorHandler
.
有关更多信息,请参阅 Annotation Support 。
所有请求-回复终端节点(基于AbstractReplyProducingMessageHandler
) 现在可以启动事务,因此,使整个下游流成为事务性的。
有关更多信息,请参阅 Transaction Support 。
这SmartLifecycleRoleController
现在提供获取角色中终端节点状态的方法。
有关更多信息,请参阅终端节点角色。
默认情况下,POJO 方法现在通过使用InvocableHandlerMethod
,但您可以像以前一样将它们配置为使用 SPEL。
有关更多信息,请参阅 POJO 方法调用。
当将 POJO 方法作为消息处理程序时,您现在可以使用@Default
注解为不匹配的条件提供回退机制。
有关更多信息,请参阅配置 Service Activator。
我们添加了一个简单的PassThroughTransactionSynchronizationFactory
始终将轮询的消息存储在当前事务上下文中。
该消息用作failedMessage
属性的MessagingException
,它包装事务完成期间引发的任何原始异常。
有关更多信息,请参阅 事务同步 。
基于聚合器表达式的ReleaseStrategy
现在,根据MessageGroup
而不仅仅是Message<?>
.
有关更多信息,请参见聚合器和 Spring 表达式语言 (SpEL)。
您现在可以提供ObjectToMapTransformer
使用自定义的JsonObjectMapper
.
有关更多信息,请参见聚合器和 Spring 表达式语言 (SpEL)。
这@GlobalChannelInterceptor
annotation 和<int:channel-interceptor>
现在支持负向模式(通过!
prepending) 进行组件名称匹配。
有关更多信息,请参见 Global Channel Interceptor Configuration 。
当候选者无法获取锁时,LockRegistryLeaderInitiator
现在会发出一个新的OnFailedToAcquireMutexEvent
通过DefaultLeaderEventPublisher
.
看Leadership Event Handling
了解更多信息。
网关更改
当网关方法具有void
return 类型并提供 error 通道,则网关现在可以正确设置errorChannel
页眉。
以前,标题未填充。
这会导致同步下游流(在调用线程上运行)将异常发送到配置的通道,但异步下游流上的异常将发送到默认errorChannel
相反。
这RequestReplyExchanger
interface 现在有一个throws MessagingException
子句来满足提议的消息交换协定。
现在,您可以使用 SPEL 表达式指定请求和回复超时。 有关更多信息,请参阅 Messaging Gateway。
聚合器性能更改
默认情况下,聚合商现在使用SimpleSequenceSizeReleaseStrategy
,这样效率更高,尤其是对于大型组。
现在,空组计划在以下时间后删除empty-group-min-timeout
.
有关更多信息,请参阅 Aggregator。
Splitter 更改
splitter 组件现在可以处理和拆分 JavaStream
和 Reactive StreamsPublisher
对象。
如果输出通道是ReactiveStreamsSubscribableChannel
这AbstractMessageSplitter
构建一个Flux
进行后续迭代,而不是常规的Iterator
,与正在拆分的对象无关。
另外AbstractMessageSplitter
提供protected obtainSizeIfPossible()
方法来确定Iterable
和Iterator
对象。
有关更多信息,请参阅 Splitter 。
JMS 更改
以前,Spring 集成 JMS XML 配置使用默认的 Bean 名称connectionFactory
对于 JMS 连接工厂,允许从组件定义中省略该属性。
我们将其重命名为jmsConnectionFactory
,这是 Spring Boot 用于自动配置 JMS 连接工厂 Bean 的 Bean 名称。
如果您的应用程序依赖于以前的行为,则可以重命名connectionFactory
bean 设置为jmsConnectionFactory
或者通过使用 Bean 的当前名称专门配置您的组件以使用 Bean。
有关更多信息,请参阅 JMS 支持。
邮件更改
呈现 IMAP 邮件内容时的一些不一致问题已得到解决。 有关更多信息,请参阅“邮件接收通道适配器”部分中的注释。
Feed 更改
而不是com.rometools.fetcher.FeedFetcher
,它在 ROME 中已弃用,我们引入了一个新的Resource
属性的FeedEntryMessageSource
.
有关更多信息,请参阅 Feed Adapter。
文件更改
我们引入了新的FileHeaders.RELATIVE_PATH
表示相对路径的 message headerFileReadingMessageSource
.
尾部适配器现在支持idleEventInterval
在该时间段内文件中没有数据时发出事件。
flush 的FileWritingMessageHandler
现在有一个额外的参数。
文件出站通道适配器和网关 (FileWritingMessageHandler
) 现在支持REPLACE_IF_MODIFIED
FileExistsMode
.
它们现在还支持对新写入的文件设置文件权限。
新的FileSystemMarkerFilePresentFileListFilter
现已推出。
有关更多信息,请参阅处理不完整的数据。
这FileSplitter
现在提供了一个firstLineAsHeader
选项将第一行内容作为标头包含在为其余行发出的消息中。
有关更多信息,请参阅文件支持。
FTP 和 SFTP 更改
入站通道适配器现在具有一个名为max-fetch-size
,用于限制在本地目录中当前没有文件时轮询期间提取的文件数。
默认情况下,它们还配置了FileSystemPersistentAcceptOnceFileListFilter
在local-filter
.
您还可以提供自定义DirectoryScanner
通过设置新引入的scanner
属性。
您现在可以将 regex 和 pattern 过滤器配置为始终传递目录。 当您在出站网关中使用递归时,这可能很有用。
默认情况下,所有入站通道适配器(基于流和同步)现在都使用适当的AbstractPersistentAcceptOnceFileListFilter
实现以防止重复下载远程文件。
FTP 和 SFTP 出站网关现在支持REPLACE_IF_MODIFIED
FileExistsMode
在获取远程文件时。
FTP 和 SFTP 流入站通道适配器现在在消息头中添加远程文件信息。
FTP 和 SFTP 出站通道适配器(以及PUT
命令)现在支持InputStream
如payload
太。
我们添加了NLST
命令添加到AbstractRemoteFileOutboundGateway
执行 list files names remote 命令。
您现在可以提供FtpOutboundGateway
跟workingDirExpression
以更改当前请求消息的 FTP 客户端工作目录。
这RemoteFileTemplate
现在随invoke(OperationsCallback<F, T> action)
执行多个RemoteFileOperations
在同一个线程绑定的Session
.
我们添加了用于检测不完整远程文件的新过滤器。
这FtpOutboundGateway
和SftpOutboundGateway
现在支持在成功传输后使用GET
或MGET
命令。
有关更多信息,请参阅 FTP/FTPS 适配器和 SFTP 适配器。
集成属性
版本 4.3.2 添加了一个新的spring.integration.readOnly.headers
global 属性,用于自定义不应复制到新创建的Message
由MessageBuilder
.
有关更多信息,请参阅全局属性。
流更改
我们在CharacterStreamReadingMessageSource
让它用于 “管道” stdin 并在管道关闭时发布应用程序事件。
有关更多信息,请参阅从 Streams 中读取。
屏障变化
这BarrierMessageHandler
现在支持将延迟到达的 Trigger 消息发送到的 discard 通道。
有关更多信息,请参见 Thread Barrier。
AMQP 更改
AMQP 出站终端节点现在支持在使用 RabbitMQ 延迟消息交换插件时设置延迟表达式。
入站端点现在支持 Spring AMQPDirectMessageListenerContainer
.
可轮询的 AMQP 支持的通道现在阻止 Poller 配置的 Poller 线程receiveTimeout
(默认值:1 秒)。
标头(如contentType
,现在在最终消息中使用。
以前,它取决于转换器类型,即哪些 Headers 和 Message 属性出现在最终消息中。
要覆盖转换器设置的标头,请将headersMappedLast
property 设置为true
.
有关更多信息,请参阅 AMQP 支持。
HTTP 更改
默认情况下,DefaultHttpHeaderMapper.userDefinedHeaderPrefix
property 现在为空字符串,而不是X-
.
有关更多信息,请参阅 HTTP 标头映射。
默认情况下,uriVariablesExpression
现在使用SimpleEvaluationContext
(自 5.0.4 起)。
有关更多信息,请参阅映射 URI 变量。
MQTT 变更
入站消息现在使用RECEIVED_TOPIC
,RECEIVED_QOS
和RECEIVED_RETAINED
标头,以避免在应用程序中继消息时无意中传播到出站消息。
出站通道适配器现在支持 topic、qos 和 retained 属性的表达式。 默认值保持不变。 有关更多信息,请参阅 MQTT 支持。
STOMP 更改
我们将 STOMP 模块更改为使用ReactorNettyTcpStompClient
基于 Project Reactor3.1
和reactor-netty
外延。
我们将Reactor2TcpStompSessionManager
自ReactorNettyTcpStompSessionManager
,根据ReactorNettyTcpStompClient
基础。
有关更多信息,请参阅 STOMP 支持。
Web 服务更改
您现在可以供应WebServiceOutboundGateway
具有外部配置的实例WebServiceTemplate
实例。
DefaultSoapHeaderMapper
现在可以映射javax.xml.transform.Source
用户定义的标头添加到 SOAP 标头元素。
Simple WebService 入站和出站网关现在可以处理完整的WebServiceMessage
作为payload
,允许作 MTOM 附件。
有关更多信息,请参阅 Web 服务支持。
Redis 更改
这RedisStoreWritingMessageHandler
现在提供额外的String
基于 SPEL 表达式的 setter(为了方便 Java 配置)。
您现在可以配置zsetIncrementExpression
在RedisStoreWritingMessageHandler
也。
此外,此属性已从true
自false
由于INCR
选项ZADD
Redis 命令是可选的。
您现在可以提供RedisInboundChannelAdapter
替换为Executor
用于执行 Redis 侦听器调用程序。
此外,收到的消息现在包含一个RedisHeaders.MESSAGE_SOURCE
标头来指示消息的来源(主题或模式)。
有关更多信息,请参阅 Redis 支持。
TCP 更改
我们添加了一个新的ThreadAffinityClientConnectionFactory
将 TCP 连接绑定到线程。
您现在可以配置 TCP 连接工厂以支持PushbackInputStream
实例,让反序列化器在 “提前读取” 之后 “未读” (推回) 字节。
我们添加了一个ByteArrayElasticRawDeserializer
没有maxMessageSize
以根据需要控制和缓冲传入数据。
有关更多信息,请参阅 TCP 和 UDP 支持。
JDBC 更改
这JdbcMessageChannelStore
现在为ChannelMessageStorePreparedStatementSetter
,允许您在 Store 中自定义消息插入。
这ExpressionEvaluatingSqlParameterSourceFactory
现在为sqlParameterTypes
,允许您自定义参数的 SQL 类型。
有关更多信息,请参阅 JDBC 支持。
指标更改
现在支持 Micrometer 应用程序监控(自 5.0.2 版本起)。 有关更多信息,请参阅 Micrometer 集成。
对 Micrometer 进行了更改Meters 在 5.0.3 版本中,使它们更适合在维度系统中使用。
在 5.0.4 中进行了进一步的更改。
如果您使用 Micrometer,我们建议至少使用 5.0.4 版本。 |
@EndpointId
附注
在版本 5.0.4 中引入,此注释提供了在使用 Java 配置时对 Bean 命名的控制。 有关更多信息,请参见端点 Bean 名称。