|
如需使用最新稳定版本,请使用 Spring Integration 7.0.4! |
5.0 与 5.1 之间的变更
新组件
以下组件是 5.1 版本新增的:
AmqpDedicatedChannelAdvice
查看 严格消息排序。
增强的函数支持
The java.util.function interfaces now have improved integration support in the Framework components.
Also, Kotlin lambdas now can be used for handler and source methods.
@LongRunningTest
提供了 JUnit 5 @LongRunningTest 条件注解,用于检查环境或系统属性中是否存在值为 true 的 RUN_LONG_INTEGRATION_TESTS 条目,从而确定是否应运行或跳过测试。
参见 JUnit 规则和条件。
常规变更
以下是在 5.1 版本中进行的更改:
Java DSL
IntegrationFlowContext现在是一个接口,IntegrationFlowRegistration是IntegrationFlowContext的内部接口。
为了方便在请求 - 响应配置中于流程末尾进行日志记录,已引入一个新的 logAndReply() 运算符。
这避免了与 log() 的混淆,后者被视为单向结束流组件。
对于集成流中的任何 NamedComponent,生成的 Bean 名称现在将基于组件类型,以便从可视化工具、日志分析器和指标收集器中获得更好的可读性。
The GenericHandler.handle() now excepts a MessageHeaders type for the second argument.
调度器异常
由 AbstractDispatcher 捕获并重新抛出的异常现在更加一致:
-
任何具有
failedMessage属性的MessagingException类型都会被原样重新抛出。 -
所有其他异常都会被封装在
MessageDeliveryException中,并设置failedMessage属性。
之前:
-
A
MessagingExceptionof any kind that has afailedMessageproperty was re-thrown unchanged -
一个没有
failedMessage属性的MessagingException被包装在MessagingException中,且该MessagingException的failedMessage属性已设置。 -
其他
RuntimeException个实例被原样重新抛出。 -
已检查异常被包装在
MessageDeliveryException中,且failedMessage属性已设置。
全局通道拦截器
全局通道拦截器现在适用于动态注册的通道,例如通过 Java DSL 使用 IntegrationFlowContext 或通过 beanFactory.initializeBean() 初始化的 Bean。
此前,当 Bean 在应用上下文刷新后创建时,拦截器不会被应用。
通道拦截器
ChannelInterceptor.postReceive() 在未收到消息时不再被调用;现在无需再检查 null Message<?>。
此前,该方法会被调用。
如果您有依赖此先前行为的拦截器,请改用实现 afterReceiveCompleted(),因为无论是否收到消息,该方法都会被调用。
此外,PolledAmqpChannel 和 PolledJmsChannel 此前不会用 null 调用 afterReceiveCompleted();现在会这样做了。
集成流:生成的 Bean 名称
从 5.0.5 版本开始,在 IntegrationFlow 中生成的组件的 bean 名称将包含流 bean 的名称,后跟一个点,作为前缀。
例如,如果流 bean 被命名为 flowBean,则生成的 bean 可能命名为 flowBean.generatedBean。
有关更多信息,请参见处理消息流。
聚合器变更
如果 groupTimeout 被评估为负值,聚合器现在将立即使组过期。
只有 null 被视为对当前消息不做任何操作的信号。
已引入一个新的popSequence属性,默认情况下允许为输出消息调用MessageBuilder.popSequenceDetails()。
此外,AbstractAggregatingMessageGroupProcessor现在返回AbstractIntegrationMessageBuilder而非整个Message,以进行优化。
有关更多信息,请参见 聚合器。
@Publisher 注解变更
从版本 5.1 开始,您必须显式启用 @Publisher AOP 功能,方法是使用 @EnablePublisher 或在 <int:annotation-config> 上使用 <int:enable-publisher> 子元素。
此外,proxy-target-class 和 order 属性已添加用于调整 ProxyFactory 配置。
有关更多信息,请参阅使用 @Publisher 注解的基于注解的配置。
文件变更
如果您使用的是 FileExistsMode.APPEND 或 FileExistsMode.APPEND_NO_FLUSH,您可以提供一个 newFileCallback,该函数将在创建新文件时被调用。
此回调会接收新创建的文件以及触发回调的消息。
例如,这可用于写入 CSV 文件的表头。
The FileReadingMessageSource现在不会检查并创建目录,直到其 start() 被调用。
因此,如果 FileReadingMessageSource 的入站通道适配器具有 autoStartup = false,则在应用程序启动期间不会对文件系统造成失败。
有关更多信息,请参阅 文件支持。
AMQP 变更
我们已在DefaultAmqpHeaderMapper中对ID和Timestamp进行了标头映射更改。
有关更多信息,请参阅AMQP 消息标头底部的说明。
The contentType 标头现在已正确映射为通用标头映射中的条目。
有关更多信息,请参阅 contentType 标头。
从版本 5.1.3 开始,如果在手动确认消息时发生消息转换异常,并且已定义错误通道,则负载为 ManualAckListenerExecutionFailedException,并带有额外的 channel 和 deliveryTag 属性。
这使得错误流能够 ack/nack 原始消息。
有关更多信息,请参阅 入站消息转换。
JDBC 更改
JDBC Inbound Channel Adapter 和 JDBC Outbound Gateway 上令人困惑的 max-rows-per-poll 属性已被弃用,取而代之的是新引入的 max-rows 属性。
当请求消息的负载是 Iterable 类型的实例时,JdbcMessageHandler 现在支持 batchUpdate 功能。
INT_CHANNEL_MESSAGE 表(针对 JdbcChannelMessageStore)的索引已优化。
如果您在该存储中有大型消息组,可能需要修改索引。
有关更多信息,请参见 JDBC 支持。
FTP 和 SFTP 变更
A RotatingServerAdvice is now available to poll multiple servers and directories with the inbound channel adapters.
See Inbound Channel Adapters: Polling Multiple Servers and Directories and Inbound Channel Adapters: Polling Multiple Servers and Directories for more information.
此外,入站适配器 localFilenameExpression 实例可以包含 #remoteDirectory 变量,该变量包含被轮询的远程目录。
用于对获取的文件列表进行排序的比较器的泛型类型已从 Comparator<AbstractFileInfo<F>> 更改为 Comparator<F>(适用于流式适配器)。
有关更多信息,请参阅 FTP 流式入站通道适配器 和 SFTP 流式入站通道适配器。
此外,入站通道适配器的同步器现在可以指定为 Comparator。
这在配合使用 maxFetchSize 以限制检索的文件数量时非常有用。
The CachingSessionFactory 具有一个新属性 testSession,当该属性为 true 时,会在从缓存中检出现有会话时,促使工厂对 Session 执行 test() 操作。
TCP 支持
使用 SSL 时,默认情况下已启用主机验证,以防止受信任证书中间人攻击。 有关更多信息,请参阅 主机验证。
此外,密钥库和信任库的类型现在可以在 DefaultTcpSSLContextSupport 上配置。
Twitter 支持
由于 Spring Social 项目已移至 生命周期结束状态,Spring Integration 中的 Twitter 支持已移至 Extensions 项目。 有关更多信息,请参阅 Spring Integration Social Twitter。
JMS 支持
The JmsSendingMessageHandler 现在提供 deliveryModeExpression 和 timeToLiveExpression 选项,用于在运行时确定要发送的 JMS 消息的相应 QoS 选项。
The DefaultJmsHeaderMapper 现在允许通过设置 true 来映射入站 JMSDeliveryMode 和 JMSExpiration 属性到相应的 setMapInboundDeliveryMode() 和 setMapInboundExpiration() 选项。
当 JmsMessageDrivenEndpoint 或 JmsInboundGateway 停止时,关联的监听器容器现在将被关闭;这将关闭其共享连接以及任何消费者。
您可以配置端点以恢复到以前的行为。
有关更多信息,请查看 JMS 支持。
HTTP/WebFlux 支持
The statusCodeExpression (and Function) 现在随 RequestEntity<?> 作为根对象提供给评估上下文,因此请求头、方法、URI 和主体可用于目标状态码计算。
有关更多信息,请参阅 HTTP 支持 和 WebFlux 支持。
JMX 更改
对象名称键值现在如果包含任何不符合 Java 标识符(或点 .)允许的字符,将被引号包围。
例如 org.springframework.integration:type=MessageChannel, name="input:foo.myGroup.errors"。
这会产生一个副作用:之前“允许”的、包含此类字符的名称现在将被引号包围。
例如 org.springframework.integration:type=MessageChannel, name="input#foo.myGroup.errors"。
Micrometer 支持变更
现在,自定义框架创建的 Micrometer 标准度量指标更加简单了。 有关更多信息,请参阅 Micrometer 集成。
集成图自定义
现在可以通过在 IntegrationGraphServer 上执行 Function<NamedComponent, Map<String, Object>> additionalPropertiesCallback,为 IntegrationNodes 添加额外属性。
有关更多信息,请参阅 集成图。
集成全局属性
集成全局属性(包括默认值)现在可以在日志中打印,当为类别 org.springframework.integration 启用 DEBUG 逻辑级别时。
有关更多信息,请参阅 全局属性。
这receiveTimeout对于@Poller
The @Poller 注解现在为方便起见提供了 receiveTimeout 选项。
有关更多信息,请参阅 使用 @Poller 注解。