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