5.0 和 5.1 之间的更改
新组件
以下是 5.1 中的新增功能组件:
AmqpDedicatedChannelAdvice
请参阅 严格消息排序。
@LongRunningTest
提供了 JUnit 5 条件注释,用于检查值为 of 的条目的环境或系统属性,以确定是应该运行还是跳过 test。@LongRunningTest
RUN_LONG_INTEGRATION_TESTS
true
请参阅 JUnit 规则和条件。
一般更改
版本 5.1 中进行了以下更改:
Java DSL
现在是接口,并且是 的内部接口。IntegrationFlowContext
IntegrationFlowRegistration
IntegrationFlowContext
为方便起见,当您希望在请求-回复配置的流结束时记录时,引入了一个新运算符。
这避免了与 被视为单向端流分量的混淆。logAndReply()
log()
现在,为集成流中的任何内容生成的 bean 名称都基于组件类型,以便可视化工具、日志分析器和指标收集器具有更好的可读性。NamedComponent
现在,第二个参数的 type 除外。GenericHandler.handle()
MessageHeaders
Dispatcher 异常
捕获和重新引发的异常现在更加一致:AbstractDispatcher
-
具有属性的任何类型的 A 都会原封不动地重新引发。
MessagingException
failedMessage
-
所有其他异常都包装在 a 中,并设置了 property 。
MessageDeliveryException
failedMessage
以前:
-
具有属性的任何类型的 A 都会原封不动地重新引发
MessagingException
failedMessage
-
没有属性的 A 包装在设置了该属性的 a 中。
MessagingException
failedMessage
MessagingException
failedMessage
-
其他实例被原封不动地重新抛出。
RuntimeException
-
已检查的异常包装在 a 中,并设置了 属性。
MessageDeliveryException
failedMessage
全局通道拦截器
全局通道拦截器现在应用于动态注册的通道,例如通过使用 Java DSL 或使用初始化的 bean 时。
以前,在刷新应用程序上下文后创建 bean 时,不会应用拦截器。IntegrationFlowContext
beanFactory.initializeBean()
通道拦截器
ChannelInterceptor.postReceive()
未收到消息时不再调用;不再需要检查 .
以前,该方法被调用。
如果你有一个依赖于先前行为的拦截器,请改为实现,因为无论是否收到消息,都会调用该方法。
此外,和 以前未使用 ;他们现在这样做了。null
Message<?>
afterReceiveCompleted()
PolledAmqpChannel
PolledJmsChannel
afterReceiveCompleted()
null
集成流:生成的 Bean 名称
从版本 5.0.5 开始,为 中的组件生成的 bean 名称包括 flow bean 名称,后跟一个点作为前缀。
例如,如果流 Bean 被命名为 ,则生成的 Bean 可能被命名为 。IntegrationFlow
flowBean
flowBean.generatedBean
有关更多信息,请参阅Working With Message Flows。
Aggregator 更改
如果 the 的计算结果为负值,则聚合商现在会立即使该组过期。
Only 被视为对当前消息不执行任何操作的信号。groupTimeout
null
引入了一个新属性,以允许(默认情况下)为输出消息调用 a。
此外,现在返回 an 而不是整体进行优化。popSequence
MessageBuilder.popSequenceDetails()
AbstractAggregatingMessageGroupProcessor
AbstractIntegrationMessageBuilder
Message
有关更多信息,请参阅 Aggregator。
文件更改
如果您正在使用或可以提供 a 将在创建新文件时调用。
该回调接收新创建的文件和触发回调的消息。
例如,这可用于编写 CSV 标头。FileExistsMode.APPEND
FileExistsMode.APPEND_NO_FLUSH
newFileCallback
now 在调用之前不会检查并创建目录。
因此,如果 has 的 Inbound Channel Adapter 在应用程序启动期间文件系统不会出现故障。FileReadingMessageSource
start()
FileReadingMessageSource
autoStartup = false
有关更多信息,请参阅文件支持。
AMQP 更改
我们在 .
有关更多信息,请参阅 AMQP Message Headers 底部附近的注释。ID
Timestamp
DefaultAmqpHeaderMapper
现在,该标题已正确映射为常规标题映射中的一个条目。
有关更多信息,请参阅 contentType Header 。contentType
从版本 5.1.3 开始,如果在使用手动确认时发生消息转换异常,并且定义了错误通道,则有效负载为具有附加 和 属性的 a。
这使得错误流能够确认/nack 原始消息。
有关更多信息,请参阅 入站消息转换 。ManualAckListenerExecutionFailedException
channel
deliveryTag
JDBC 更改
JDBC Inbound Channel Adapter 和 JDBC Outbound Gateway 上令人困惑的属性已被弃用,取而代之的是新引入的属性。max-rows-per-poll
max-rows
现在,当请求消息的有效负载是某种类型的实例时,它支持一项功能。JdbcMessageHandler
batchUpdate
Iterable
表 (的 ) 的索引已得到优化。
如果您在此类存储中有大型消息组,则可能需要更改索引。INT_CHANNEL_MESSAGE
JdbcChannelMessageStore
有关更多信息,请参阅 JDBC 支持。
FTP 和 SFTP 更改
现在,A 可用于使用入站通道适配器轮询多个服务器和目录。
有关更多信息,请参见入站通道适配器:轮询多个服务器和目录和入站通道适配器:轮询多个服务器和目录。RotatingServerAdvice
此外,入站适配器实例可以包含变量,该变量包含正在轮询的远程目录。
比较器的泛型类型(用于对流适配器的获取文件列表进行排序)已从 更改为 。
有关更多信息,请参阅 FTP 流入站通道适配器 和 SFTP 流入站通道适配器。localFilenameExpression
#remoteDirectory
Comparator<AbstractFileInfo<F>>
Comparator<F>
此外,现在可以为入站通道适配器的同步器提供 .
这在 用于限制检索的文件时非常有用。Comparator
maxFetchSize
这有一个新属性,当 true 时,会导致工厂在从缓存中检出现有 session 时对 执行操作。CachingSessionFactory
testSession
test()
Session
有关更多信息,请参阅 SFTP 会话缓存和 FTP 会话缓存。
TCP 支持
使用 SSL 时,现在默认启用主机验证,以防止使用受信任证书进行中间人攻击。 有关更多信息,请参阅主机验证。
此外,现在可以在 .DefaultTcpSSLContextSupport
Twitter 支持
由于 Spring Social 项目已进入生命周期结束状态,因此 Spring Integration 中的 Twitter 支持已移至 Extensions 项目。 有关更多信息,请参见 Spring Integration Social Twitter。
JMS 支持
现在提供 和 选项来确定 JMS 消息在运行时发送的相应 QoS 选项。
现在允许通过设置将入站和属性映射到相应的 and 选项。
当 或 停止时,关联的侦听器容器现在将关闭;这将关闭其共享连接和任何使用者。
您可以将终端节点配置为恢复到之前的行为。JmsSendingMessageHandler
deliveryModeExpression
timeToLiveExpression
DefaultJmsHeaderMapper
JMSDeliveryMode
JMSExpiration
true
setMapInboundDeliveryMode()
setMapInboundExpiration()
JmsMessageDrivenEndpoint
JmsInboundGateway
有关更多信息,请参阅 JMS 支持。
HTTP/WebFlux 支持
现在,(和 ) 作为评估上下文的根对象提供,因此请求标头、方法、URI 和正文可用于目标状态代码计算。statusCodeExpression
Function
RequestEntity<?>
有关更多信息,请参阅 HTTP 支持 和 WebFlux 支持 。
JMX 更改
现在,如果对象名称键值包含除 Java 标识符(或 period )中允许的字符以外的任何字符,则会引用这些值。
例如。
这有一个副作用,以前“允许”的名称(带有此类字符)现在将被引用。
例如。.
org.springframework.integration:type=MessageChannel,
name="input:foo.myGroup.errors"
org.springframework.integration:type=MessageChannel,
name="input#foo.myGroup.errors"
千分尺支持更改
现在,自定义框架创建的标准 Micrometer meter 变得更加简单。 有关更多信息,请参阅 Micrometer 集成。
集成图定制
现在可以通过 .
有关更多信息,请参阅 Integration Graph。IntegrationNode
Function<NamedComponent, Map<String, Object>> additionalPropertiesCallback
IntegrationGraphServer
集成全局属性
当为类别打开逻辑电平时,现在可以在日志中打印 Integration 全局属性(包括默认值)。
有关更多信息,请参阅全局属性。DEBUG
org.springframework.integration
的 forreceiveTimeout
@Poller
为了方便起见,注释现在提供了一个选项。
有关更多信息,请参阅使用 @Poller
注释。@Poller
receiveTimeout