# 变更历史

# 变更历史

# 5.3 和 5.4 之间的变化

# 新组件

# 用于 Apache Kafka 的通道适配器

独立的Spring Integration for Apache Kafka (opens new window)项目已合并为该项目的spring-integration-kafka模块。

KafkaProducerMessageHandler``sendTimeoutExpression默认值已更改。

现在可以访问底层send()操作的Future<?>

有关更多信息,请参见Spring for Apache Kafka Support

# R2DBC 通道适配器

介绍了用于 R2DBC 数据库交互的通道适配器。有关更多信息,请参见R2DBC 支持

# Redis 流支持

Redis 流支持的通道适配器已经引入。有关更多信息,请参见Redis 流出站通道适配器

# 可更新锁定注册中心

引入了一个可更新的锁注册中心,以允许对分布式锁进行更新租赁。有关更多信息,请参见JDBC 实现

# zeromq 支持

已经引入了ZeroMqChannelZeroMqMessageHandlerZeroMqMessageProducer。有关更多信息,请参见ZeroMQ 支持

# 一般变化

单向消息传递网关(void方法返回类型)现在将nullChannel显式地设置到replyChannel头中,以忽略任何可能的下游回复。有关更多信息,请参见设置默认回复通道

另外,网关方法调用者(GatewayProxyFactoryBean.MethodInvocationGateway)现在提供了托管 Bean 名称,作为网关代理 Bean 名称加上方法签名的组合。例如:sampleGateway#echo(String)。这会影响为网关方法调用公开的消息历史和度量,还会在应用程序上下文的启动和关闭期间提供细粒度的日志。

聚合器(和 Resequencer)现在可以使孤立的组(在持久存储中的组)过期,在应用程序重新启动后,不会有新消息到达该存储)。有关更多信息,请参见聚合器到期的组

被千分尺取代的传统度量标准已被删除。

螺纹屏障现在有两个独立的超时选项:requestTimeouttriggerTimeout

# TCP/UDP 更改

连接工厂现在支持多个发送组件(TcpSender);它们仍然限于一个接收组件(TcpListener)。例如,这允许入站网关和出站通道适配器共享相同的工厂,支持从服务器到客户机的请求/回复和任意消息传递。除非使用一次性连接或ThreadAffinityClientConnectionFactory,否则不应将共享工厂与出站网关一起使用。有关更多信息,请参见协作通道适配器TCP 网关

现在可以将 UDP 通道适配器配置为SocketCustomizer,这允许设置适配器不直接支持的套接字属性。有关更多信息,请参见UDP 适配器

# RMI 变化

spring-integration-rmi模块不推荐使用,不提供替换,并将在下一个主要版本中删除。有关更多信息,请参见RMI 支助

# AMQP 变化

出站端点现在有了处理发布服务器确认和返回的新机制。有关更多信息,请参见发布服务器确认和返回的替代机制

新的BatchMode.EXTRACT_PAYLOAD_WITH_HEADERSAmqpInboundChannelAdapter支持。有关更多信息,请参见入站通道适配器

# 邮件更改

AbstractMailReceiver现在可以生成MimeMessageas-is,而无需急于获取其内容。有关更多信息,请参见邮件接收通道适配器

# 5.2 与 5.3 之间的变化

# 新组件

# 集成模式

引入了IntegrationPattern抽象,以指示哪个 Enterprise 集成模式(anIntegrationPatternType)和类别 A Spring 集成组件属于哪个。有关此抽象及其用例的更多信息,请参见其 Javadocs 和积分图

# ReactiveMessageHandler

现在框架中原生支持ReactiveMessageHandler。有关更多信息,请参见reactiveMessageHandler

# ReactiveMessageSourceProducer

ReactiveMessageSourceProducerMessageProducerSupport的一个反应性实现,用于将所提供的MessageSource封装到Flux中,用于按需receive()调用。有关更多信息,请参见反应流支持

# Java DSL 扩展

引入了一个新的IntegrationFlowExtensionAPI,允许使用定制或组合的 EIP 操作符扩展现有的 Java DSL。这也可以用于为任何开箱即用的IntegrationComponentSpec扩展引入自定义程序。有关更多信息,请参见DSL 扩展

# Kotlin dsl

Kotlin 介绍了用于集成流配置的 DSL。有关更多信息,请参见Kotlin DSL Chapter

# reactiverequesthandleradvice

提供了一个ReactiveRequestHandlerAdvice来自定义消息处理程序的Mono回复。有关更多信息,请参见反应性建议

# 处理 MessageAdviceAdapter

提供了一个HandleMessageAdviceAdapter来包装任何MethodInterceptor,用于在MessageHandler.handleMessage()上应用,而不是默认的AbstractReplyProducingMessageHandler.RequestHandler.handleRequestMessage()行为。有关更多信息,请参见处理消息建议

# MongoDB 反应通道适配器

spring-integration-mongodb模块现在为 Spring 数据中的反应式 MongoDB 驱动程序支持提供通道适配器实现。另外,对于 MongoDB 变更流支持的一个反应性实现存在于MongoDbChangeStreamMessageProducer中。有关更多信息,请参见MongoDB 支持

# 收到邮件通知

一个特殊的ReceiveMessageAdvice已被引入到代理中,正好是MessageSource.receive()PollableChannel.receive()。有关更多信息,请参见智能轮询

# 一般更改

Gateway Proxy 现在默认不代理default方法。有关更多信息,请参见[调用default方法]。

内部组件(例如_org.springframework.integration.errorLogger)现在在积分图中表示时具有缩短的名称。有关更多信息,请参见积分图

在聚合器中,当MessageGroupProcessor返回Message时,如果sequenceDetails与组的第一条消息中的头匹配,则在输出消息上执行MessageBuilder.popSequenceDetails()。有关更多信息,请参见聚合器编程模型

在 Java DSL 中添加了一个新的publishSubscribeChannel()操作符,该操作符基于BroadcastCapableChannelBroadcastPublishSubscribeSpec。当我们为经纪人支持的通道(如SubscribableJmsChannelSubscribableRedisChannel等)将子流配置为发布-订阅服务器时,这种 Fluent API 具有其优势。有关更多信息,请参见子流支持

Spring 集成中的事务支持现在还包括配置ReactiveTransactionManager的选项,如果MessageSourceMessageHandler实现产生了用于发送有效负载的反应性类型。有关更多信息,请参见TransactionInterceptorBuilder。另见被动交易

在 Java DSL 中添加了一个新的intercept()运算符,可以在不创建显式通道的情况下注册ChannelInterceptor实例。有关更多信息,请参见操作员截获()

MessageStoreSelector有一个新的机制来比较新旧的值。有关更多信息,请参见幂等接收机 Enterprise 集成模式

现在,MessageProducerSupport基类有一个subscribeToPublisher(Publisher<? extends Message<?>>)API,允许实现消息驱动的生产者端点,这些生产者端点通过反应性Publisher发送消息。有关更多信息,请参见反应流支持

# AMQP 变化

出站通道适配器有一个新的属性multiSend,允许在一个RabbitTemplate调用的范围内发送多个消息。有关更多信息,请参见AMQP 出站通道适配器

入站通道适配器现在支持一个侦听器容器,其consumerBatchEnabled属性设置为true。见AMQP 入站通道适配器

# http 更改

AbstractHttpRequestExecutingMessageHandler上的encodeUri属性已被弃用,以支持新引入的encodingMode。有关更多信息,请参见DefaultUriBuilderFactory.EncodingModeJavadocs 和控制 URI 编码。这也会影响WebFluxRequestExecutingMessageHandler、相应的 Java DSL 和 XML 配置。将相同的选项添加到AbstractWebServiceOutboundGateway中。

# Web 服务变更

已经为 Web 服务组件添加了 Java DSL 支持。在AbstractWebServiceOutboundGateway上的encodeUri属性已被弃用,以支持新引入的encodingMode-类似于上面的 HTTP 更改。有关更多信息,请参见Web 服务支持

# TCP 更改

默认情况下,在当前连接失败之前,FailoverClientConnectionFactory不再会再次失败。有关更多信息,请参见TCP 故障转移客户端连接工厂

TcpOutboundGateway现在支持异步请求/回复。有关更多信息,请参见TCP 网关

现在,你可以将客户端连接配置为对新连接执行一些任意的测试。有关更多信息,请参见测试连接

# rsocket 更改

decodeFluxAsUnit选项已被添加到RSocketInboundGateway中,其含义是将传入的Flux作为单个单元进行解码,或对其中的每个事件应用解码。有关更多信息,请参见RSocket 入站网关

# 动物园管理员变更

LeaderInitiatorFactoryBean(以及其 XML<int-zk:leader-listener>)公开了一个candidate选项,用于对Candidate配置进行更多控制。有关更多信息,请参见领导事件处理

# MQTT 变化

现在可以将入站通道适配器配置为在消息被确认为已发送时为用户提供控制。有关更多信息,请参见手动 ACK

当连接无法创建或丢失时,出站适配器现在会发布MqttConnectionFailedEvent。以前,只有入站适配器才会这样做。见MQTT 事件

# (s)FTP 更改

FileTransferringMessageHandler(例如对于 FTP 和 SFTP)除了Filebyte[]StringInputStream之外,现在还支持org.springframework.core.io.Resource。有关更多信息,请参见SFTP 支持FTP 支持

# 文件更改

对于markersJson模式,FileSplitter不再需要 Jackson 处理器(或类似的)依赖关系。它使用SimpleJsonSerializer表示FileSplitter.FileMarker实例的简单字符串表示。有关更多信息,请参见文件夹

# 5.1 和 5.2 之间的变化

# 包和类的更改

Pausable已从o.s.i.endpoint移动到o.s.i.core

# 行为变化

请参阅迁移指南 (opens new window)关于此版本中的行为更改。

# 新组件

# RSocket 支持

spring-integration-rsocket模块现在可以在支持 RSocket 协议的通道适配器实现中使用。有关更多信息,请参见RSocket 支持

# 利率限制建议支持

RateLimiterRequestHandlerAdvice现在可用于限制处理程序的请求速率。有关更多信息,请参见速率限制器建议

# 缓存建议支持

CacheRequestHandlerAdvice现在可用于在处理程序上缓存请求结果。有关更多信息,请参见缓存建议

# Kotlin 脚本支持

JSR223 脚本模块现在包括对 Kotlin 脚本的支持。有关更多信息,请参见脚本支持

# 流量聚合器支持

FluxAggregatorMessageHandler现在可用于基于 Project ReactorFlux操作符的消息逻辑的分组和窗口。有关更多信息,请参见通量聚合器

# FTP/SFTP 事件发布者

FTP 和 SFTP 模块现在为某些 Apache Mina FTP/SFTP 服务器事件提供了一个事件侦听器。有关更多信息,请参见Apache Mina FTP 服务器事件Apache Mina SFTP 服务器事件

# AVRO 变压器

现在提供了简单的 Apache AVRO 变压器。有关更多信息,请参见AVRO 变压器

# 一般变化

现在,JsonToObjectTransformer支持将目标对象反序列化为泛型。有关更多信息,请参见JSON 变形金刚

splitter现在支持discardChannel配置选项。有关更多信息,请参见Splitter

控制总线现在可以处理PausableLifecycle的扩展)操作。有关更多信息,请参见控制总线

为聚合器组件引入了Function<MessageGroup, Map<String, Object>>策略,用于合并和计算输出消息的头。有关更多信息,请参见聚合器编程模型

在框架中抛出的所有MessageHandlingExceptions,现在包括一个 Bean 资源和用于反向跟踪配置部分的源,以防不涉及最终用户代码。有关更多信息,请参见错误处理

为了获得更好的最终用户体验,Java DSL 现在提供了一个配置变量,用于通过网关接口启动流。有关更多信息,请参见IntegrationFlows.from(Class<?> serviceInterface, Consumer<GatewayProxySpec> endpointConfigurer)Javadocs。另外,MethodArgsHolder现在是用于GatewayProxyFactoryBean中所有表达式的求值上下文的根对象。现在不推荐#args#method评估上下文变量。有关更多信息,请参见消息传递网关

# AMQP 变化

如果在超时期间没有收到发布者确认,那么出站端点现在可以被配置为合成“NACK”。有关更多信息,请参见出站通道适配器

入站通道适配器现在可以作为List<?>有效负载接收批处理的消息,而不是为每个批处理片段接收离散的消息。有关更多信息,请参见批处理消息

现在可以将出站通道适配器配置为阻止调用线程,直到收到发布者确认(确认)。有关更多信息,请参见出站通道适配器

# 文件更改

对过滤远程文件进行了一些改进。有关更多信息,请参见远程持久文件列表过滤器

# TCP 更改

ByteArrayLengthHeaderSerializer使用的长度标头现在可以在有效负载之外包括标头的长度。有关更多信息,请参见消息划分(序列化器和反序列化器)

当使用TcpNioServerConnectionFactory时,现在优先考虑接受新的连接,而不是从现有连接中读取新的连接,但是它是可配置的。有关更多信息,请参见关于非阻塞 I/O(蔚来)

出站网关有一个新的属性closeStreamAfterSend;当与新的连接一起使用时,对于每个请求/应答它向服务器发出 EOF 信号,而不关闭连接。这对于使用 EOF 来表示消息结束而不是数据中的某些分隔符的服务器很有用。有关更多信息,请参见TCP 网关

客户机连接工厂现在支持connectTimeout,如果在此期间没有建立连接,则会引发异常。有关更多信息,请参见TCP 连接工厂

SoftEndOfStreamException现在是RuntimeException,而不是扩展IOException

# 邮件更改

AbstractMailReceiver现在有一个autoCloseFolder选项(默认情况下是true),可以在获取后禁用自动文件夹关闭,但是填充IntegrationMessageHeaderAccessor.CLOSEABLE_RESOURCE头,以进行下游交互。有关更多信息,请参见邮件接收通道适配器

# http 更改

HTTP 入站端点现在支持请求有效负载验证。有关更多信息,请参见HTTP 支持

# WebFlux 更改

WebFluxRequestExecutingMessageHandler现在支持PublisherResourceMultiValueMap作为请求消息payloadWebFluxInboundEndpoint现在支持请求有效负载验证。有关更多信息,请参见WebFlux 支持

# MongoDB 变更

现在可以将MongoDbMessageStore配置为自定义转换器。有关更多信息,请参见MongoDB 支持

# 路由器变更

现在你可以禁用返回通道键作为通道 Bean 名称。有关更多信息,请参见动态路由器

# ftp/sftp 更改

现在将RotatingServerAdviceRotationPolicy及其StandardRotationPolicy解耦。

远程文件信息,包括主机/端口和目录,现在包含在AbstractInboundFileSynchronizingMessageSourceAbstractRemoteFileStreamingMessageSource实现中的消息头中。这一信息也包括在AbstractRemoteFileOutboundGateway实现的读取操作结果中的标题中。FTP 出站端点现在支持chmod更改上载文件的权限。(SFTP 从 4.3 版本开始就支持它了)。有关更多信息,请参见FTP 支持SFTP 支持

# 5.0 和 5.1 之间的变化

# 新组件

以下组件是 5.1 中的新组件:

  • [AmqpDedicatedChannelAdvice](#x5.1-amqpdedicatedchanneladvice)
# AmqpDedicatedChannelAdvice

严格的消息排序

# 功能支持改进

java.util.function接口现在在框架组件中具有改进的集成支持。 Kotlin Lambdas 现在也可以用于处理程序和源方法。

参见[java.util.function接口支持]。

# @LongRunningTest

提供了一个 JUnit5@LongRunningTest条件注释,用于检查值为RUN_LONG_INTEGRATION_TESTStrue条目的环境或系统属性,以确定是否应该运行或跳过测试。

JUnit 规则和条件

# 一般变动

在版本 5.1 中进行了以下更改:

# Java DSL

IntegrationFlowContext现在是一个接口,IntegrationFlowRegistrationIntegrationFlowContext的一个内部接口。

引入了一个新的logAndReply()操作符,以便在流的末尾记录请求-回复配置时使用。这避免了与log()的混淆,后者被视为单向结束流组件。

Bean 在集成流中为任何NamedComponent生成的名称现在基于组件类型,以便从可视化工具、日志分析器和度量收集器获得更好的可读性。

GenericHandler.handle()现在排除了第二个参数的MessageHeaders类型。

# Dispatcher 异常

AbstractDispatcher捕获和重新抛出的异常现在更加一致:

  • 具有failedMessage属性的任何类型的MessagingException都将被重新抛出,保持不变。

  • 所有其他异常都包装在MessageDeliveryException中,并带有failedMessage属性集。

以前:

  • 具有failedMessage属性的任何类型的MessagingException都会被重新抛出,不变。

  • 没有failedMessage属性的MessagingException被包装在MessagingException中,并带有failedMessage属性集。

  • 其他RuntimeException实例被重新抛出,保持不变。

  • 选中的异常被包装在带有failedMessage属性集的MessageDeliveryException中。

# 全局信道拦截器

全局信道拦截器现在应用于动态注册的信道,例如在使用 Java DSL 或使用beanFactory.initializeBean()初始化的 bean 时通过IntegrationFlowContext。以前,当应用程序上下文被刷新后创建 bean 时,拦截程序不会被应用。

# 信道拦截器

当没有收到消息时,将不再调用ChannelInterceptor.postReceive();不再需要检查null``Message<?>。以前,这种方法被称为。如果你的拦截器依赖于前面的行为,那么可以实现afterReceiveCompleted(),因为无论是否接收到消息,该方法都会被调用。此外,PolledAmqpChannelPolledJmsChannel以前不会用afterReceiveCompleted()调用afterReceiveCompleted();现在它们会调用。

# ObjectToJsonTransformer

ObjectToJsonTransformer引入了一个新的ResultType.BYTES模式。

有关更多信息,请参见JSON 变形金刚

# 集成流:生成的 Bean 名称

从版本 5.0.5 开始,在IntegrationFlow中为组件生成的 Bean 名称包括流 Bean 名称,然后是一个点,作为前缀。例如,如果一个流 Bean 被命名为flowBean,那么生成的 Bean 可能被命名为flowBean.generatedBean

有关更多信息,请参见处理消息流

# 聚合器更改

如果groupTimeout被求值为负值,聚合器现在立即使该组过期。只有null被认为是对当前消息不做任何事情的信号。

引入了一个新的popSequence属性,允许(默认情况下)为输出消息调用MessageBuilder.popSequenceDetails()。另外,AbstractAggregatingMessageGroupProcessor现在返回AbstractIntegrationMessageBuilder,而不是整个Message,以进行优化。

有关更多信息,请参见Aggregator

# @publisher 注释更改

从版本 5.1 开始,你必须使用@EnablePublisher或在<int:annotation-config>上使用<int:enable-publisher>子元素来显式地打开@Publisher AOP 功能。还添加了proxy-target-classorder属性,用于优化ProxyFactory配置。

有关更多信息,请参见[使用@Publisher注释的注释驱动配置]。

# 文件更改

如果使用FileExistsMode.APPENDFileExistsMode.APPEND_NO_FLUSH,则可以提供一个newFileCallback,在创建新文件时将调用它。此回调接收新创建的文件和触发回调的消息。例如,这可以用来编写一个 CSV 标头。

现在,FileReadingMessageSource在调用它的start()之前,不会检查并创建一个目录。因此,如果FileReadingMessageSource的入站通道适配器具有autoStartup = false,则在应用程序启动期间不会出现针对文件系统的故障。

有关更多信息,请参见文件支持

# AMQP 变化

我们已经在IDTimestamp头映射中对DefaultAmqpHeaderMapper进行了更改。有关更多信息,请参见AMQP 消息头底部附近的注释。

contentType标头现在被正确地映射为 General Headers 映射中的一个条目。有关更多信息,请参见ContentType 标头

从版本 5.1.3 开始,如果在使用手动确认时发生消息转换异常,并且定义了错误通道,则有效负载是带有额外ManualAckListenerExecutionFailedExceptiondeliveryTag属性的ManualAckListenerExecutionFailedException。这使错误流能够 ACK/NACK 原始消息。有关更多信息,请参见入站消息转换

# JDBC 更改

在 JDBC 入站通道适配器和 JDBC 出站网关上的一个令人困惑的max-rows-per-poll属性已被弃用,取而代之的是新引入的max-rows属性。

当请求消息的有效负载是Iterable类型的实例时,JdbcMessageHandler现在支持batchUpdate功能。

INT_CHANNEL_MESSAGE表(JdbcChannelMessageStore)的索引已经优化。如果在这样的存储区中有大的消息组,则可能希望更改索引。

有关更多信息,请参见JDBC 支持

# FTP 和 SFTP 更改

现在可以使用RotatingServerAdvice用入站通道适配器轮询多个服务器和目录。有关更多信息,请参见入站通道适配器:轮询多个服务器和目录入站通道适配器:轮询多个服务器和目录

此外,入站适配器localFilenameExpression实例可以包含#remoteDirectory变量,该变量包含正在轮询的远程目录。比较器的通用类型(用于对流适配器的获取文件列表进行排序)已从Comparator<AbstractFileInfo<F>>更改为Comparator<F>。有关更多信息,请参见FTP 流入站通道适配器SFTP 流入站通道适配器

此外,用于入站通道适配器的同步器现在可以提供一个Comparator。这在使用maxFetchSize限制检索的文件时很有用。

CachingSessionFactory具有一个新的属性testSession,如果该属性为真,则当从缓存中签出一个已存在的会话时,工厂将在test()上执行一个test()操作。

有关更多信息,请参见SFTP Session CachingFTP Session Caching

出站网关 mput 命令现在支持带有文件或字符串集合的消息有效负载。有关更多信息,请参见SFTP 出站网关FTP 出站网关

# TCP 支持

在使用 SSL 时,现在默认情况下启用了主机验证,以防止使用受信任证书的中间人攻击。有关更多信息,请参见主机验证

此外,键和信任存储类型现在可以在DefaultTcpSSLContextSupport上配置。

# Twitter 支持

由于 Spring 社交项目已经转移到生命终结状态 (opens new window), Spring 集成中的 Twitter 支持已经转移到扩展项目中。有关更多信息,请参见Spring Integration Social Twitter (opens new window)

# JMS 支持

JmsSendingMessageHandler现在提供deliveryModeExpressiontimeToLiveExpression选项,以确定在运行时要发送的 JMS 消息的相应 QoS 选项。现在,DefaultJmsHeaderMapper允许通过设置true相应的setMapInboundDeliveryMode()setMapInboundExpiration()选项来映射入站JMSExpiration属性。当JmsMessageDrivenEndpointJmsInboundGateway被停止时,关联的侦听器容器现在被关闭;这将关闭其共享连接和任何使用者。你可以将端点配置为恢复到以前的行为。

有关更多信息,请参见JMS 支持

# http/webflux 支持

statusCodeExpression(和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"

# 千分尺支持变更

现在可以更简单地定制由该框架创建的标准千分表。有关更多信息,请参见千分尺积分

# 集成图定制

现在可以在IntegrationGraphServer上通过Function<NamedComponent, Map<String, Object>> additionalPropertiesCallbackIntegrationNodes 添加附加属性。有关更多信息,请参见积分图

# 集成全局属性

当打开org.springframework.integration类别的DEBUG逻辑级别时,现在可以在日志中打印集成全局属性(包括默认值)。有关更多信息,请参见全局属性

# receiveTimeout@Poller

为了方便起见,@Poller注释现在提供了receiveTimeout选项。请参阅[使用@Poller注释](./configuration.html#configuration-using-poller-annotation)以获取更多信息。

# 4.3 到 5.0 之间的变化

有关可能影响应用程序的重要更改,请参见迁移指南 (opens new window)。你可以在wiki (opens new window)上找到所有回到 2.1 版本的迁移指南。

# 新组件

5.0 版本增加了许多新的组件。

# Java DSL

单独的Spring Integration Java DSL (opens new window)项目现在已合并到核心 Spring 集成项目中。用于通道适配器和网关的IntegrationComponentSpec实现被分发到它们的特定模块。有关 Java DSL 支持的更多信息,请参见Java DSL。另请参见4.3 到 5.0 迁移指南 (opens new window),以了解移动到 Spring Integration5.0 所需的步骤。

# 测试支持

我们创建了一个新的 Spring 集成测试框架,以帮助测试 Spring 集成应用程序。现在,使用测试类上的@SpringIntegrationTest注释和MockIntegration工厂,你可以使集成流的 JUnit 测试变得更容易一些。

有关更多信息,请参见测试支持

# MongoDB 出站网关

新的MongoDbOutboundGateway允许你通过向数据库的请求通道发送消息,按需对数据库进行查询。

有关更多信息,请参见MongoDB 出站网关

# WebFlux 网关和通道适配器

我们介绍了用于 Spring WebFlux 框架网关和通道适配器的新的 WebFlux 支持模块。

有关更多信息,请参见WebFlux 支持

# 内容类型转换

既然我们使用了新的基于InvocableHandlerMethod的基础架构来进行服务方法调用,那么我们就可以执行contentType从有效负载到目标方法参数的转换。

有关更多信息,请参见内容类型转换

# ErrorMessagePublisherErrorMessageStrategy

我们添加了ErrorMessagePublisherErrorMessageStrategy来创建ErrorMessage实例。

有关更多信息,请参见错误处理

# JDBC 元数据存储

我们添加了MetadataStore实现的 JDBC 实现。当你需要确保元数据的事务边界时,这是非常有用的。

有关更多信息,请参见JDBC 元数据存储

# 一般更改

Spring 集成现在完全基于 Spring 框架5.0和项目反应堆3.1。以前的 Project Reactor 版本不再支持。

# 核心变化

@Poller注释现在具有errorChannel属性,以便更轻松地配置底层MessagePublishingErrorHandler。有关更多信息,请参见注释支持

所有请求-应答端点(基于AbstractReplyProducingMessageHandler)现在都可以启动事务,因此,使整个下游流具有事务性。有关更多信息,请参见事务支持

现在,SmartLifecycleRoleController提供了获取角色中端点状态的方法。有关更多信息,请参见端点角色

默认情况下,POJO 方法现在通过使用InvocableHandlerMethod调用,但是你可以像以前一样将它们配置为使用 SPEL。有关更多信息,请参见POJO 方法调用

当以 POJO 方法为消息处理程序时,你现在可以使用@Default注释标记其中一个服务方法,以便为不匹配的条件提供一种后备机制。有关更多信息,请参见配置服务激活器

我们添加了一个简单的PassThroughTransactionSynchronizationFactory,以始终在当前事务上下文中存储轮询消息。该消息用作failedMessage属性的MessagingException,该属性包装事务完成期间抛出的任何原始异常。有关更多信息,请参见事务同步

基于聚合器表达式的ReleaseStrategy现在根据MessageGroup计算表达式,而不是仅根据Message<?>的集合计算表达式。有关更多信息,请参见Aggregators and Spring Expression Language (SpEL)

你现在可以用定制的JsonObjectMapper提供ObjectToMapTransformer

有关更多信息,请参见Aggregators and Spring Expression Language (SpEL)

@GlobalChannelInterceptor注释和<int:channel-interceptor>现在支持组件名称匹配的负模式(通过!前置)。有关更多信息,请参见全局信道拦截器配置

当候选者未能获得锁时,LockRegistryLeaderInitiator现在通过DefaultLeaderEventPublisher发出一个新的OnFailedToAcquireMutexEvent。有关更多信息,请参见[Leadership Event Handling](./endpoint.html#leadership-event-handling)

# 网关更改

当网关方法具有void返回类型并且提供了错误通道时,网关现在正确地设置errorChannel报头。在此之前,头文件是不填充的。这导致同步下游流(在调用线程上运行)将异常发送到配置的通道,但是异步下游流上的异常将被发送到默认的errorChannel

RequestReplyExchanger接口现在有一个throws MessagingException子句,以满足建议的消息交换契约。

现在可以使用 SPEL 表达式指定请求和回复超时。有关更多信息,请参见消息传递网关

# 聚合器性能更改

默认情况下,聚合器现在使用SimpleSequenceSizeReleaseStrategy,这更有效,尤其是对于大型组。空组现在被安排在empty-group-min-timeout之后被删除。有关更多信息,请参见Aggregator

# 拆分器更改

Splitter 组件现在可以处理和分割 JavaStream和反应流Publisher对象。如果输出通道是ReactiveStreamsSubscribableChannel,则AbstractMessageSplitter构建一个Flux用于后续迭代,而不是常规的Iterator,这与被分割的对象无关。此外,AbstractMessageSplitter提供了protected obtainSizeIfPossible()方法,以允许确定IterableIterator对象的大小,如果这是可能的话。有关更多信息,请参见Splitter

# JMS 更改

以前, Spring Integration JMS XML 配置对 JMS 连接工厂使用默认的 Bean 名称connectionFactory,这使得组件定义中省略了该属性。我们将其重命名为jmsConnectionFactory,这是 Spring 引导用于自动配置 JMS 连接工厂 Bean 的 Bean 名称。

如果你的应用程序依赖于先前的行为,那么你可以将你的connectionFactory Bean 重命名为jmsConnectionFactory,或者通过使用其当前名称来专门配置组件以使用你的 Bean。有关更多信息,请参见JMS 支持

# 邮件更改

一些与呈现 IMAP 邮件内容的不一致之处已得到解决。有关更多信息,请参见“邮件接收通道适配器”部分中的注释

# 提要更改

而不是com.rometools.fetcher.FeedFetcher,这在罗马是不受欢迎的,我们为FeedEntryMessageSource引入了一个新的Resource属性。有关更多信息,请参见馈源适配器

# 文件更改

我们引入了新的FileHeaders.RELATIVE_PATH消息头来表示FileReadingMessageSource中的相对路径。

尾部适配器现在支持idleEventInterval在该期间文件中没有数据时发出事件。

FileWritingMessageHandler的 flush 谓词现在有了一个额外的参数。

文件出站通道适配器和网关(FileWritingMessageHandler)现在支持REPLACE_IF_MODIFIED``FileExistsMode

它们现在还支持在新编写的文件上设置文件权限。

一个新的FileSystemMarkerFilePresentFileListFilter现在可用。有关更多信息,请参见处理不完整的数据

现在,FileSplitter提供了一个firstLineAsHeader选项,可以将第一行内容作为消息头,发送给其余的行。

有关更多信息,请参见文件支持

# FTP 和 SFTP 更改

入站通道适配器现在具有一个名为max-fetch-size的属性,该属性用于在当前本地目录中没有文件时限制轮询期间获取的文件数量。默认情况下,它们还在local-filter中配置了FileSystemPersistentAcceptOnceFileListFilter

还可以通过设置新引入的scanner属性,为入站通道适配器提供自定义DirectoryScanner实现。

现在,你可以将正则表达式和模式筛选器配置为始终传递目录。当你在出站网关中使用递归时,这可能是有用的。

默认情况下,所有入站通道适配器(基于流和同步)现在都使用适当的AbstractPersistentAcceptOnceFileListFilter实现,以防止远程文件的重复下载。

FTP 和 SFTP 出站网关现在在获取远程文件时支持REPLACE_IF_MODIFIED``FileExistsMode

FTP 和 SFTP 流入站通道适配器现在在消息头中添加远程文件信息。

FTP 和 SFTP 出站通道适配器(以及用于出站网关的PUT命令)现在也支持InputStreamaspayload

入站通道适配器现在可以通过使用新引入的RecursiveDirectoryScanner在本地构建文件树。有关注入,请参见FTP 入站通道适配器部分中的scanner选项。另外,你现在可以将这些适配器切换到WatchService

我们将NLST命令添加到AbstractRemoteFileOutboundGateway命令中,以执行 List Files Names Remote 命令。

现在可以使用FtpOutboundGatewayworkingDirExpression来更改当前请求消息的 FTP 客户机工作目录。

现在为RemoteFileTemplate提供了invoke(OperationsCallback<F, T> action),以便在相同的、以线程为边界的RemoteFileOperations范围内执行多个RemoteFileOperations调用。

我们添加了新的过滤器来检测不完整的远程文件。

FtpOutboundGatewaySftpOutboundGateway现在支持使用GETMGET命令在成功传输后删除远程文件的选项。

有关更多信息,请参见FTP/FTPS 适配器SFTP 适配器

# 积分属性

版本 4.3.2 添加了一个新的spring.integration.readOnly.headers全局属性,使你可以自定义不应该由MessageBuilder复制到新创建的Message的标题列表。有关更多信息,请参见全局属性

# 流变化

我们在CharacterStreamReadingMessageSource上添加了一个新选项,以使其用于“pipe”stdin,并在管道关闭时发布应用程序事件。有关更多信息,请参见从流中阅读

# 障碍变化

BarrierMessageHandler现在支持一个丢弃通道,可以将延迟到达的触发消息发送到该通道。有关更多信息,请参见螺纹屏障

# AMQP 变化

AMQP 出站端点现在支持在使用 RabbitMQ 延迟消息交换插件时设置延迟表达式。

入站端点现在支持 Spring AMQPDirectMessageListenerContainer

支持 AMQP 的 Poller 通道现在为 Poller 配置的receiveTimeout(缺省:一秒)阻止 Poller 线程。

消息转换器添加到消息属性中的标题(例如contentType)现在在最终消息中使用。在此之前,它依赖于转换器类型,即最终消息中出现了哪些标头和消息属性。要覆盖转换器设置的标题,请将headersMappedLast属性设置为true。有关更多信息,请参见AMQP 支持

# http 更改

默认情况下,DefaultHttpHeaderMapper.userDefinedHeaderPrefix属性现在是一个空字符串,而不是X-。有关更多信息,请参见HTTP 头映射

默认情况下,uriVariablesExpression现在使用SimpleEvaluationContext(自 5.0.4 起)。

有关更多信息,请参见映射 URI 变量

# MQTT 变化

入站消息现在被映射为RECEIVED_TOPICRECEIVED_QOSRECEIVED_RETAINED头,以避免在应用程序中继消息时无意中传播到出站消息。

出站通道适配器现在支持主题、QoS 和保留属性的表达式。默认值保持不变。有关更多信息,请参见MQTT 支持

# stomp 变化

基于项目反应器3.1reactor-netty扩展,我们将 Stomp 模块改为使用ReactorNettyTcpStompClient。根据ReactorNettyTcpStompClient基础,我们将Reactor2TcpStompSessionManager重命名为ReactorNettyTcpStompSessionManager。有关更多信息,请参见Stomp 支持

# Web 服务变更

现在可以使用外部配置的WebServiceTemplate实例来提供WebServiceOutboundGateway实例。

DefaultSoapHeaderMapper现在可以将javax.xml.transform.Source用户定义的标头映射到一个 SOAP 标头元素。

简单的 WebService 入站和出站网关现在可以将完整的WebServiceMessage处理为payload,从而允许对 MTOM 附件进行操作。

有关更多信息,请参见Web 服务支持

# Redis 变更

现在为RedisStoreWritingMessageHandler提供了额外的用于 SPEL 表达式的基于String的 setter(为了方便 Java 配置)。你现在也可以在RedisStoreWritingMessageHandler上配置zsetIncrementExpression。此外,由于ZADDRedis 命令上的INCR选项是可选的,因此此属性已从true更改为false

你现在可以为RedisInboundChannelAdapter提供用于执行 Redis 侦听器调用程序的Executor。此外,接收到的消息现在包含一个RedisHeaders.MESSAGE_SOURCE头,以指示消息的来源(主题或模式)。

有关更多信息,请参见Redis 支持

# TCP 更改

我们添加了一个新的ThreadAffinityClientConnectionFactory来将 TCP 连接绑定到线程。

现在,你可以将 TCP 连接工厂配置为支持PushbackInputStream实例,让反序列化器在“reading ahead”之后“unread”(后推)字节。

我们添加了不带maxMessageSizeByteArrayElasticRawDeserializer,以根据需要控制和缓冲传入数据。

有关更多信息,请参见TCP 和 UDP 支持

# Gemfire 变化

GemfireMetadataStore现在实现ListenableMetadataStore,通过向存储提供MetadataStoreListener实例,让你监听缓存事件。有关更多信息,请参见Pivotal Gemfire 和 Apache Geode 支持

# JDBC 更改

JdbcMessageChannelStore现在提供了ChannelMessageStorePreparedStatementSetter的 setter,允许你在存储中自定义消息插入。

ExpressionEvaluatingSqlParameterSourceFactory现在提供了sqlParameterTypes的 setter,允许你定制参数的 SQL 类型。

有关更多信息,请参见JDBC 支持

# 指标变化

Micrometer (opens new window)现在支持应用程序监视(自版本 5.0.2 起)。有关更多信息,请参见千分尺积分

在版本 5.0.3 中对千分尺Meters进行了更改,以使其更适合在多维系统中使用。
在 5.0.4 中进行了进一步的更改。
如果你使用千分尺,我们建议至少使用版本 5.0.4。
# @EndpointId注释

在版本 5.0.4 中引入了此注释,当你使用 Java 配置时,此注释提供了对 Bean 命名的控制。有关更多信息,请参见Endpoint Bean Names

# 4.2 与 4.3 之间的变化

有关可能影响应用程序的重要更改,请参见迁移指南 (opens new window)。你可以在Wiki (opens new window)上找到所有回到 2.1 版本的迁移指南。

# 新组件

版本 4.3 增加了一些新的组件。

# AMQP 异步出站网关

异步出站网关

# MessageGroupFactory

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

# PersistentMessageGroup

我们为持久的getMessageGroup()实例添加了PersistentMessageGroup(lazy-load proxy)实现,当getMessageGroup()lazyLoadMessageGroupstrue(默认)时,它为getMessageGroup()实例返回这个实例。有关更多信息,请参见消息存储

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

我们添加了入站通道适配器,这些适配器为每个文件返回InputStream,这样你就可以检索远程文件,而无需将它们写入本地文件系统。有关更多信息,请参见FTP 流入站通道适配器SFTP 流入站通道适配器

# StreamTransformer

我们添加了StreamTransformer来将InputStream有效载荷转换为byte[]String。有关更多信息,请参见流变压器

# 积分图

我们添加了IntegrationGraphServer,以及IntegrationGraphControllerREST 服务,以将 Spring 集成应用程序的运行时模型公开为一个图。有关更多信息,请参见积分图

# JDBC 锁定注册表

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

# LeaderInitiator表示LockRegistry

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

# 一般变化

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

# 核心变化

本节描述对 Spring 集成的核心的一般更改。

# 链中的出站网关

以前,你可以在链中的出站网关上指定reply-channel。它被完全忽视了。网关的回复将发送到下一个链元素,或者,如果网关是最后一个元素,则发送到链的输出通道。这种情况现在已被发现并被禁止。如果你有这样的配置,请删除reply-channel

# 异步服务激活器

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

# 消息传递注释支持更改

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

# 邮件更改

本节描述对 Spring 集成邮件功能的一般更改。

# 可定制用户标志

可定制的userFlag(在 4.2.2 中添加,以提供用于表示已看到邮件的标志的定制)现在在 XML 命名空间中可用。有关更多信息,请参见[不支持\Recent时标记 IMAP 消息]。

# 邮件消息映射

现在,你可以使用包含邮件头和包含电子邮件内容的有效负载的MessageHeaders映射入站邮件。以前,有效载荷总是 RAWMimeMessage。有关更多信息,请参见入站邮件消息映射

# JMS 更改

本节描述对 Spring 集成 JMS 功能的一般更改。

# Header Mapper

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

# 异步网关

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

# 聚合器更改

当 POJO 聚合器释放Message<?>对象的集合时,行为会发生变化。这是很少见的,但是,如果你的应用程序做到了这一点,你需要对 POJO 进行一个小的更改。有关更多信息,请参见[重要信息:SimpleMessageGroup.getMessages()方法返回unmodifiableCollection。](./AGGregator.html#agg-message-collection)注释。

# TCP/UDP 更改

本节描述对 Spring 集成 TCP/UDP 功能的一般更改。

# 事件

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

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

# 流反序列化器

各种反序列化器在组装完整个消息之前不能分配最终的缓冲区,现在它们支持池合并接收数据的原始缓冲区,而不是为每个消息创建和丢弃缓冲区。有关更多信息,请参见TCP 连接工厂

# TCP 消息映射器

消息映射器现在可选地设置一个已配置的内容类型标头。有关更多信息,请参见IP 消息头

# 文件更改

本节描述对 Spring 集成文件功能的一般更改。

# 目标目录创建

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

FileReadingMessageSource现在隐藏了内部类中的WatchService目录扫描逻辑。我们添加了use-watch-servicewatch-events选项来启用此行为。由于 API 的不一致性,我们不推荐顶级WatchServiceDirectoryScanner。有关更多信息,请参见[WatchServiceDirectoryScanner](./file.html#watch-service-directory-scanner)。

# 缓冲区大小

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

# 追加和刷新

现在,你可以避免在追加文件时刷新文件,并在空闲期间使用许多策略来刷新数据。有关更多信息,请参见[在使用APPEND_NO_FLUSH时刷新文件]。

# 保存时间戳

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

# 拆分器更改

现在,当文件被完全读取时,FileSplitter会自动关闭一个 FTP 或 SFTP会话。当出站网关返回InputStream或者当你使用新的 FTP 或 SFTP 流媒体通道适配器时,这一点将得到应用。我们还引入了一个新的markers-json选项,将FileSplitter.FileMarker转换为 JSONString,以进行放松的下游网络交互。有关更多信息,请参见文件拆分器

# 文件过滤器

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

# AMQP 变化

本节描述对 Spring 集成 AMQP 功能的一般更改。

# 内容类型消息转换器

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

# 用于延迟消息处理的头

Spring AMQP1.6 增加了对延迟的消息交换 (opens new window)的支持。头映射现在支持此功能使用的头(amqp_delayamqp_receivedDelay)。

# AMQP 支持的通道

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

# Redis 变更

本节描述对 Spring 集成 Redis 功能的一般更改。

# 列表推送/弹出方向

以前,队列通道适配器总是在固定的方向上使用 Redis 列表,将其推到左端并从右端读取。现在,你可以分别使用rightPopleftPush选项来配置读写方向和RedisQueueMessageDrivenEndpoint选项。有关更多信息,请参见Redis 队列入站通道适配器Redis 队列出站通道适配器

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

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

# http 更改

在此之前,如果请求的主体(如POST)中没有content-type头,则主体将被忽略。在此版本中,此类请求的内容类型被认为是 RFC2616 推荐的application/octet-stream。有关更多信息,请参见HTTP 入站组件

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

# SFTP 更改

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

# 工厂 Bean

我们添加了一个新的工厂 Bean,以简化 SFTP 的 JSCH 代理的配置。有关更多信息,请参见Proxy Factory Bean

# chmod变更

SFTP 出站网关(用于putmput命令)和 SFTP 出站通道适配器现在支持chmod属性,以在上传后更改远程文件权限。有关更多信息,请参见[SFTP Outbound Channel Adapter](./sftp.html#sftp-outbound)[SFTP Outbound Gateway](./sftp.html#sftp-outbound-gateway)

# FTP 更改

本节描述对 Spring 集成 FTP 功能的一般更改。

# 会话变化

FtpSession现在支持nulllistNames()方法的null,因为底层的 FTP 客户机可以使用它。这样,你就可以在不使用remoteDirectory表达式的情况下配置FtpOutboundGateway表达式。你也可以配置<int-ftp:inbound-channel-adapter>而不使用remote-directoryremote-directory-expression。有关更多信息,请参见FTP/FTPS 适配器

# 路由器变更

ErrorMessageExceptionTypeRouter现在支持Exception超类映射,以避免在存在多个继承者的情况下对相同通道进行重复。为此,ErrorMessageExceptionTypeRouter在初始化ClassNotFoundException的 fail-fast 期间加载映射类。

有关更多信息,请参见Routers

# 标头映射

本节描述了在版本 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现在为常规的value提供了一个别名channel属性。此外,目标SourcePollingChannelAdapter组件现在可以从其提供的名称(outputChannel Bean 选项)以后期绑定的方式解析目标outputChannelName。有关更多信息,请参见注释支持

# XMPP 更改

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

# 窃听延迟绑定

WireTap``ChannelInterceptor现在可以接受一个channelName,它将在以后的第一次活动拦截器操作期间解析为目标MessageChannel。有关更多信息,请参见Wire Tap

# ChannelMessageStoreQueryProvider变化

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

# WebSocket 变化

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

# 4.1 和 4.2 之间的变化

有关可能影响应用程序的重要更改,请参见迁移指南 (opens new window)。你可以在wiki (opens new window)上找到所有回到 2.1 版本的迁移指南。

# 新组件

版本 4.2 增加了一些新的组件。

# 主要管理/JMX 返工

我们添加了一个新的MetricsFactory策略界面。这一变化以及 JMX 和管理基础设施中的其他变化,为管理配置和运行时性能提供了更多的控制。

然而,这对(某些)用户环境有一些重要的影响。

有关完整的详细信息,请参见度量和管理JMX 改进

# MongoDB 元数据存储

MongoDbMetadataStore现在可用。有关更多信息,请参见MongoDB 元数据存储

# 安全通道注释

我们引入了@SecuredChannel注释,替换了不推荐的ChannelSecurityInterceptorFactoryBean。有关更多信息,请参见Security in Spring Integration

# SecurityContext传播

我们为从一个消息流的线程传播到另一个消息流的SecurityContext引入了SecurityContextPropagationChannelInterceptor。有关更多信息,请参见Security in Spring Integration

# 文件夹

在 4.1.2 中,我们添加了FileSplitter,它将文本文件分割成行。它现在在int-file:命名空间中获得了完全支持。有关更多信息,请参见文件拆分器

# 动物园管理员支持

我们在框架中添加了 ZooKeeper 支持,以在集群或多主机环境中运行时提供帮助。这一变化影响到以下特征:

  • ZookeeperMetadataStore

  • ZookeeperLockRegistry

  • 动物园管理员领导

有关更多信息,请参见动物园管理员支持

# 螺纹屏障

一个新的线程<int:barrier/>组件是可用的,它允许一个线程被挂起,直到某个异步事件发生。有关更多信息,请参见螺纹屏障

# stomp 支持

我们将 STOMP 支持添加到框架中,作为入站和出站通道适配器对。有关更多信息,请参见Stomp 支持

# 编解码器

引入了一个新的Codec抽象,用于对Codec之间的对象进行编码和解码。我们添加了一个使用 Kryo 的实现。我们还添加了基于编解码的变压器和消息转换器。有关更多信息,请参见Codec

# 消息 PreparedStatement setter

一个新的MessagePreparedStatementSetter函数接口回调可用于JdbcMessageHandler<int-jdbc:outbound-gateway><int-jdbc:outbound-channel-adapter>),作为使用SqlParameterSourceFactory填充PreparedStatement上下文上的参数的一种替代方法。有关更多信息,请参见出站通道适配器

# 一般变动

本部分描述了从版本 4.1 到版本 4.2 的一般更改。

# 窃听

作为现有selector属性的替代选项,<wire-tap/>元素现在支持selector-expression属性。

# 文件更改

有关这些更改的更多信息,请参见文件支持

# 追加新行

<int-file:outbound-channel-adapter><int-file:outbound-gateway>现在支持append-new-line属性。如果设置为true,则在写入消息后会在文件中添加新的行。默认属性值是false

# 忽略隐藏文件

我们为<int-file:inbound-channel-adapter>添加了ignore-hidden属性,使你可以设置是否从源目录中获取隐藏的文件。它默认为true

# 写入InputStream有效载荷

FileWritingMessageHandler现在也接受InputStream作为有效的消息有效负载类型。

# HeadDirectoryScanner

你现在可以将HeadDirectoryScanner与其他FileListFilter实现一起使用。

# 上次修改的过滤器

我们添加了LastModifiedFileListFilter

# 手表服务目录扫描仪

我们添加了WatchServiceDirectoryScanner

# 持久文件列表过滤器更改

AbstractPersistentFileListFilter具有一个新属性(flushOnUpdate),当将其设置为true时,如果实现Flushable(例如,PropertiesPersistingMetadataStore),则在元数据存储上调用flush()

# 类包更改

我们将org.springframework.integration.scattergather类从org.springframework.integration.handler移到了org.springframework.integration.scattergather

# TCP 更改

本节描述对 Spring Integration TCP 功能的一般更改。

# TCP 序列化器

tcpSerializers不再flush()``OutputStream。现在这是由TcpNxxConnection类完成的。如果直接在代码中使用序列化器,则可能需要flush()``OutputStream

# 服务器套接字异常

TcpConnectionServerExceptionEvent现在,每当 TCP 服务器套接字上发生意外异常时,都会发布实例(也添加到 4.1.3 和 4.0.7 中)。有关更多信息,请参见TCP 连接事件

# TCP 服务器端口

如果将 TCP 服务器套接字工厂配置为侦听随机端口,那么现在可以通过使用getPort()获得 OS 选择的实际端口。getServerSocketAddress()也是可用的。

有关更多信息,请参见“TCP 连接工厂”。

# TCP 网关远程超时

TcpOutboundGateway现在支持remote-timeout-expression作为现有remote-timeout属性的替代选项。这允许根据每条消息设置超时。

此外,remote-timeout不再默认为与reply-timeout相同的值,这具有完全不同的含义。

有关更多信息,请参见.TCP 出站网关属性

# TCP SSLSession 可用于头映射

TcpConnection实现现在支持getSslSession(),让你从会话中提取信息以添加到消息头中。有关更多信息,请参见null

# TCP 事件

现在,每当出现关联异常时,就会发布新的事件——例如向不存在的套接字发送消息。

TcpConnectionEventListeningMessageProducer不受欢迎。使用泛型事件适配器。

有关更多信息,请参见TCP 连接事件

# @InboundChannelAdapter变更

以前,入站通道适配器上的@PollerTcpNxxConnection属性默认为-1(无穷大)。这与<inbound-channel-adapter/>的 XML 配置不一致,后者缺省为1。注解现在默认此属性为1

# API 更改

o.s.integration.util.FunctionIterator现在需要一个o.s.integration.util.Function,而不是一个reactor.function.Function。这样做是为了消除对反应堆不必要的硬性依赖。这个迭代器的任何使用都需要更改导入。

对于Promise网关等功能,仍然支持 Reactor。对于那些不需要该依赖项的用户,该依赖项已被删除。

# JMS 更改

本节描述对 Spring Integration TCP 功能的一般更改。

# 回复侦听器惰性初始化

现在,你可以将 JMS 出站网关中的应答侦听器配置为按需初始化,并在空闲一段时间后停止,而不是由网关的生命周期来控制。有关更多信息,请参见出站网关

# 消息驱动端点中的转换错误

error-channel现在用于转换错误。在以前的版本中,它们会导致事务回滚和消息重新交付。

有关更多信息,请参见消息驱动通道适配器confirm-ack-channel

# 默认确认模式

当使用隐式定义的DefaultMessageListenerContainer时,默认的acknowledge现在是transacted。我们建议在使用此容器时使用transacted,以避免消息丢失。这个默认值现在应用于消息驱动的入站适配器和入站网关。它已经是 JMS 支持的通道的默认设置。

有关更多信息,请参见消息驱动通道适配器和。

# @EnableIntegration共享订阅

我们向消息驱动的端点和<int-jms:publish-subscribe-channel>添加了对共享订阅(JMS2.0)的命名空间支持。以前,你必须将侦听器容器连接为<bean/>声明,以使用共享连接。

有关更多信息,请参见default-reply-to

# 条件 Pollers

现在,我们为动态轮询提供了更大的灵活性。

有关更多信息,请参见消息源的条件 Poller

# AMQP 变化

本节描述 Spring 集成 AMQP 功能的一般更改。

# 发布者确认

<int-amqp:outbound-gateway>现在支持confirm-correlation-expressionconfirm-ack-channelconfirm-nack-channel属性(其目的类似于<int-amqp:outbound-channel-adapter>)。

# 相关数据

对于出站通道适配器和入站网关,如果相关数据是Message<?>,则它将成为 ACK 或 NACK 通道上消息的基础,并添加额外的头。以前,任何相关数据(包括Message<?>)都作为 ACK 或 NACK 消息的有效负载返回。

# 入站网关属性

<int-amqp:inbound-gateway>现在公开amqp-template属性,以允许对外部 Bean 的答复o.s.integration.util.Function进行更多控制。你还可以提供自己的AmqpTemplate实现。此外,如果请求消息没有replyTo属性,则可以使用default-reply-to

有关更多信息,请参见AMQP 支持

# XPath 拆分器改进

现在,XPathMessageSplitter<int-xml:xpath-splitter>)允许为内部output-properties配置output-properties,并支持用于 XPath 评估Iterator结果的true模式(默认为true)。

有关更多信息,请参见分割 XML 消息

# http 更改

本节描述对 Spring 集成 HTTP 功能的一般更改。

# CORS

HTTP 入站端点(<int-http:inbound-channel-adapter><int-http:inbound-gateway>)现在允许跨源资源共享的配置。

有关更多信息,请参见跨源资源共享支持

# 入站网关超时

你可以将 HTTP 入站门方式配置为在请求超时时返回指定的状态码。现在的默认值是500 Internal Server Error,而不是200 OK

有关更多信息,请参见响应状态代码

# 表单数据

我们添加了代理multipart/form-data请求的文档。有关更多信息,请参见HTTP 支持

# 网关更改

本节描述对 Spring 集成网关功能的一般更改。

# 网关方法可以返回CompletableFuture<?>

当使用 Java8 时,网关方法现在可以返回CompletableFuture<?>。有关更多信息,请参见[CompletableFuture](./gateway.html#gw-completable-future)。

# MessagingGateway 注释

请求和回复超时属性现在是,而不是Long,以允许使用属性占位符或 SPEL 进行配置。参见[@MessagingGateway注释]。

# 聚合器更改

本节描述对 Spring 集成聚合器功能的一般更改。

# 聚合器性能

该版本通过在发布组消息时更有效地从组中删除消息,对聚合组件(聚合器、重排序程序和其他组件)进行了一些性能改进。新的方法(removeMessagesFromGroup)已添加到消息存储中。设置removeBatchSize属性(默认:CompletableFuture<?>)以调整每个操作中删除的消息数量。目前,JDBC、Redis 和 MongoDB 消息存储支持此属性。

# 输出消息组处理器

当使用ref或 inner Bean 作为聚合器时,现在可以直接绑定MessageGroupProcessor。此外,我们还添加了一个SimpleMessageGroupProcessor,它传回组中的消息集合。当输出处理器生成@MessagingGateway的集合时,聚合器将单独释放这些消息。配置SimpleMessageGroupProcessor会使聚合器成为消息屏障,在这里,消息会一直保留到所有消息到达,然后单独发布。有关更多信息,请参见Aggregator

# FTP 和 SFTP 更改

本节描述对 Spring 集成 FTP 和 SFTP 功能的一般更改。

# 入站通道适配器

现在可以在入站通道适配器上指定remote-directory-expression,以在运行时确定目录。有关更多信息,请参见FTP/FTPS 适配器SFTP 适配器

# 网关部分结果

当你使用 FTP 或 SFTP 出站网关对多个文件(使用mgetmput)进行操作时,在部分请求完成后可能会发生异常。如果出现这样的条件,将抛出一个包含部分结果的PartialSuccessException。有关更多信息,请参见FTP 出站网关SFTP 出站网关

# 委托会话工厂

我们添加了一个委托会话工厂,允许基于某些线程上下文值来选择特定的会话工厂。

有关更多信息,请参见Delegating Session FactoryDelegating Session Factory

# 默认 SFTP会话工厂

以前,DefaultSftpSessionFactory无条件地允许与未知主机的连接。这现在是可配置的(默认值:false)。

工厂现在需要一个已配置的knownHosts,文件,除非allowUnknownKeys属性是true(默认:false)。

有关更多信息,请参见[allowUnknownKeys::设置为true以允许使用未知(或更改)密钥的主机连接。]。

# 消息会话回调

我们引入了MessageSessionCallback<F, T>以在<int-(s)ftp:outbound-gateway/>中使用requestMessage上下文执行任何自定义Session操作。

有关更多信息,请参见[使用MessageSessionCallback](./ftp.html#ftp-会话-callback)和MessagesessionCallback

# WebSocket 变化

我们在WebSocketHandlerDecoratorFactory中添加了ServerWebSocketContainer支持,以允许对内部WebSocketHandler进行链式定制。有关更多信息,请参见WebSockets 名称空间支持

# 应用程序事件适配器更改

ApplicationEvent适配器现在可以使用payload作为event来操作,从而直接允许省略自定义ApplicationEvent扩展。为此,我们在<int-event:outbound-channel-adapter>上引入了publish-payload布尔属性。有关更多信息,请参见[ Spring ApplicationEvent支持]。

# 4.0 和 4.1 之间的变化

有关可能影响应用程序的重要更改,请参见迁移指南 (opens new window)。你可以在wiki (opens new window)上找到所有回到 2.1 版本的迁移指南。

# 新组件

版本 4.1 增加了一些新的组件。

# promise<?>gateway

消息传递网关方法现在支持 reactorPromise返回类型。见异步网关

# WebSocket 支持

WebSocket模块现已可用。它完全基于 Spring WebSocket 和 Spring 消息传递模块,并提供了<inbound-channel-adapter><outbound-channel-adapter>。有关更多信息,请参见WebSockets 支持

# 散集 Enterprise 集成模式

实现了散集 Enterprise 集成模式。有关更多信息,请参见分散收集

# 布线滑移模式

我们添加了路由条 EIP 模式的实现。有关更多信息,请参见布线滑移

# 幂等接收器模式

通过在 XML 中添加布线滑移组件或在 Java 配置中添加IdempotentReceiverInterceptorIdempotentReceiver注释,我们添加了幂等接收器 Enterprise 集成模式实现。有关更多信息,请参见JsonObjectMapperJavadoc (opens new window)

# 布线滑移BoonJsonObjectMapper

我们为 JSON Transformers 添加了好处JsonObjectMapper。有关更多信息,请参见变压器

# Redis 队列网关

我们添加了<redis-queue-inbound-gateway><redis-queue-outbound-gateway>组件。见Redis 队列入站网关Redis 队列出站网关

# PollSkipAdvice

我们添加了<advice-chain>,你可以在<poller><advice-chain>中使用它来确定当前轮询是否应该被你用PollSkipStrategy实现的某些条件所抑制(跳过)。有关更多信息,请参见Poller

# 一般变化

本节描述了从 4.0 到 4.1 版本的一般更改。

# AMQP 入站端点,通道

使用消息侦听器容器(入站端点和通道)的元素现在支持missing-queues-fatal属性。有关更多信息,请参见AMQP 支持

# AMQP 出站端点

AMQP 出站端点支持一个名为lazy-connect的新属性(默认:true)。当true时,直到第一条消息到达(假设没有入站端点,这些端点总是在启动过程中尝试建立连接),才会建立到代理的连接。当设置为Poller时,将在应用程序启动期间尝试建立连接。有关更多信息,请参见AMQP 支持

# SimpleMessageStore

在调用getMessageGroup()时,SimpleMessageStore不再复制该组。有关更多信息,请参见[[warning](./message-store.html#sms-caution)。

# Web 服务出站网关:encode-uri

<ws:outbound-gateway/>现在提供了一个encode-uri属性,允许在发送请求之前禁用 URI 对象的编码。

# HTTP 入站通道适配器和状态代码

现在可以将<http:inbound-channel-adapter>配置为。

# MQTT 适配器更改

现在,你可以将 MQTT 通道适配器配置为连接到多个服务器——例如,以支持高可用性。有关更多信息,请参见MQTT 支持

MQTT 消息驱动通道适配器现在支持为每个订阅指定 QoS 设置。有关更多信息,请参见入站(消息驱动)通道适配器

MQTT 出站通道适配器现在支持异步发送,在确认发送之前避免阻塞。有关更多信息,请参见出站通道适配器

现在可以在运行时以编程方式订阅和取消订阅主题。有关更多信息,请参见入站(消息驱动)通道适配器

# FTP 和 SFTP 适配器更改

FTP 和 SFTP 出站通道适配器现在支持追加到远程文件,并在远程文件已经存在时采取特定的操作。远程文件模板现在也支持这一点,以及rmdir()exists()。此外,远程文件模板提供了对底层客户机对象的访问,从而能够访问底层 API。

有关更多信息,请参见FTP/FTPS 适配器SFTP 适配器

# 拆分器和迭代器

Splitter组件现在支持将Iterator作为生成输出消息的结果对象。有关更多信息,请参见Splitter

# allowUnknownKeys聚合器

AggregatorInstancess 现在支持一个新属性expire-groups-upon-timeout。有关更多信息,请参见Aggregator

# 内容更丰富的改进

我们添加了一个null-result-expression属性,如果<enricher>返回null,则对该属性进行求值并返回。你可以在<header><property>中添加它。有关更多信息,请参见内容更丰富

我们添加了一个error-channel属性,如果Exception发生在request-channel的下游,该属性将用于处理错误流。这使你可以返回一个替代对象来用于充实。有关更多信息,请参见内容更丰富

# header 通道注册表

<header-enricher/>元素的<header-channels-to-string/>子元素现在可以重写 header 通道注册中心保留通道映射的默认时间。有关更多信息,请参见报头通道注册表

# 有序关机

我们对有序关机算法进行了改进。有关更多信息,请参见有序关机

# RecipientListRouter的管理

RecipientListRouter现在提供了几个管理操作,以在运行时配置收件人。这样,你现在就可以配置<recipient-list-router>,而不需要从一开始就配置任何<recipient>。有关更多信息,请参见[RecipientListRouterManagement]。

# AbstracTheAderMapper:非 _Standard_Headers 令牌

AbstractHeaderMapper实现现在提供了额外的NON_STANDARD_HEADERS令牌来映射任何用户定义的标头,这些标头在默认情况下是不映射的。有关更多信息,请参见AMQP 消息头

# AMQP 信道:template-channel-transacted

我们为 AMQPMessageChannel实例引入了template-channel-transacted属性。有关更多信息,请参见AMQP 支持的消息通道

# syslog 适配器

默认的 Syslog 消息转换器现在有一个选项,可以在设置消息头的同时保留有效负载中的原始消息。有关更多信息,请参见Syslog 入站通道适配器

# 异步网关

除了Promise返回类型前面提到过外,网关方法现在还可以返回Promise,这是 Spring Framework4.0 中介绍的。你还可以在网关中禁用异步处理,让下游流直接返回Future。见异步网关

# 聚合器建议链

AggregatorResequencer现在支持<expire-advice-chain/><expire-transactional/>子元素来建议forceComplete操作。有关更多信息,请参见使用 XML 配置聚合器

# 出站通道适配器和脚本

重测序器现在支持<script/>子元素。底层脚本必须具有void返回类型或null返回类型。见Groovy 支持脚本支持

# 重测序器更改

当重排序程序中的消息组超时(使用group-timeoutMessageGroupStoreReaper)时,现在默认情况下,将立即丢弃延迟到达的消息。见重测序器

# 可选 POJO 方法参数

Spring 集成现在一致地处理 Java8 的Optional类型。见配置服务激活器

# QueueChannelbacked 队列类型

支持QueueChannelQueue type已从BlockingQueue更改为更通用的Queue。此更改允许使用任何外部Queue实现(例如,Reactor 的PersistentQueue)。参见[QueueChannel配置]。

# ChannelInterceptor变化

ChannelInterceptor现在支持额外的afterSendCompletion()afterReceiveCompletion()方法。见出站通道适配器

# IMAP PEEK

从版本 4.1.1 开始,如果将mail.[protocol].peekJavaMail 属性显式地设置为false(其中[protocol]imapimaps),则行为会发生变化。参见[[重要]]。

# 3.0 和 4.0 之间的变化

有关可能影响应用程序的重要更改,请参见迁移指南 (opens new window)。你可以在wiki (opens new window)上找到所有回到 2.1 版本的迁移指南。

# 新组件

4.0 版本增加了许多新的组件。

# MQTT 通道适配器

MQTT 通道适配器(以前在 Spring 集成扩展存储库中可用)现在可以作为正常 Spring 集成分布的一部分使用。见MQTT 支持

# @EnableIntegration

我们添加了@EnableIntegration注释,以允许在使用@Configuration类时声明标准 Spring 集成 bean。有关更多信息,请参见注释支持

# @IntegrationComponentScan

我们添加了@IntegrationComponentScan注释,以允许 Classpath 扫描 Spring 特定于集成的组件。有关更多信息,请参见注释支持

# “@enableMessageHistory”

现在可以在@Configuration类中使用@EnableMessageHistory注释来启用消息历史记录。此外,JMX MBean 还可以修改消息历史设置。此外,MessageHistory可以跟踪自动创建的带有注释的端点的MessageHandler实例(例如@ServiceActivator@Splitter,以及其他)。有关更多信息,请参见消息历史

# @MessagingGateway

现在可以使用@MessagingGateway注释配置消息传递网关接口。它类似于<int:gateway/>XML 元素。有关更多信息,请参见[@MessagingGateway注释]。

# Spring boot@EnableAutoConfiguration

除了前面提到的@EnableIntegration注释之外,我们还引入了一个钩子,允许 Spring 集成基础架构 bean 配置 Spring boot 的@EnableAutoConfiguration注释。有关更多信息,请参见 Spring 引导参考指南中的“自动配置” (opens new window)

# @GlobalChannelInterceptor

除了上面提到的@EnableIntegration注释之外,我们还引入了@GlobalChannelInterceptor注释。有关更多信息,请参见注释支持

# @IntegrationConverter

我们引入了@IntegrationConverter注释,作为<int:converter/>组件的类似物。有关更多信息,请参见注释支持

# @EnablePublisher

我们添加了@EnablePublisher注释,以便为@Publisher注释提供default-publisher-channel的规范。有关更多信息,请参见注释支持

# Redis Channel 消息存储

我们添加了一个 REDISMessageGroupStore,该 REDIS 对支持QueueChannel以实现持久性进行了优化。有关更多信息,请参见Redis Channel 消息存储

我们添加了一个 redisChannelPriorityMessageStore。你可以使用它来按优先级检索消息。有关更多信息,请参见Redis Channel 消息存储

# MongodDB 频道消息存储

MongoDB 支持现在提供了MongoDbChannelMessageStore,这是一个特定于通道的MessageStore实现。使用priorityEnabled = true,你可以在<int:priority-queue>元素中使用它来实现持久消息的优先顺序轮询。有关更多信息,请参见MongoDB 通道消息存储

# @EnableIntegrationMBeanExport

现在可以在@Configuration类中启用IntegrationMBeanExporter注释。有关更多信息,请参见MBean 出口商

# ChannelSecurityInterceptorFactoryBean

ChannelSecurityInterceptorFactoryBean现在支持为使用@Configuration类的消息通道配置 Spring 安全性。有关更多信息,请参见Security in Spring Integration

# Redis 命令网关

Redis 支持现在提供<outbound-gateway>组件,以通过使用RedisConnection#execute方法执行通用的 Redis 命令。有关更多信息,请参见Redis 出站命令网关

# RedisLockRegistryGemfireLockRegistry

RedisLockRegistryGemfireLockRegistry现在可用于支持多个应用程序实例和服务器可见的全局锁。这些可以用于跨多个应用程序实例的聚合消息处理程序,从而仅在一个实例上发生组发布。有关更多信息,请参见Redis 锁注册表Gemfire Lock 注册表Aggregator

# @Poller

基于注释的消息传递配置现在可以具有poller属性。这意味着用@ServiceActivator@Aggregator注释的方法和类似的注释现在可以使用inputChannel,这是对PollableChannel的引用。有关更多信息,请参见注释支持

# @InboundChannelAdapterSmartLifecycle用于带注释的端点

我们添加了@InboundChannelAdapter方法注释。它类似于<int:inbound-channel-adapter>XML 组件。此外,所有消息传递注释现在都提供SmartLifecycle选项。有关更多信息,请参见注释支持

# Twitter 搜索出站网关

我们添加了一个新的 Twitter 端点:<int-twitter-search-outbound-gateway/>。与每次使用相同搜索查询进行轮询的搜索入站适配器不同,出站网关允许按需定制查询。有关更多信息,请参见Spring Integration Social Twitter (opens new window)

# Gemfire 元数据存储

我们添加了GemfireMetadataStore,让它在例如多个应用程序实例或服务器环境中的AbstractPersistentAcceptOnceFileListFilter实现中使用。有关更多信息,请参见元数据存储读取文件FTP 入站通道适配器SFTP 入站通道适配器

# @BridgeFrom@BridgeTo注释

我们引入了@BridgeFrom@BridgeTo``@Bean方法注释,以在@Configuration类中标记MessageChannelbean。有关更多信息,请参见注释支持

# 元消息传递注释

消息注释(@ServiceActivator@Router@MessagingGateway等)现在可以配置为用户定义消息注释的元注释。此外,用户定义的注释可以具有相同的属性(inputChannel@PollerautoStartup等)。有关更多信息,请参见注释支持

# 一般变化

本部分描述了从 3.0 到 4.0 版本的一般更改。

# 需要 Spring 框架 4.0

我们将核心消息抽象(MessageMessageChannel等)移动到了 Spring 框架spring-messaging模块。在代码中直接引用这些类的开发人员需要进行更改,如3.0 到 4.0 迁移指南 (opens new window)的第一部分所述。

# XPath header Enricher 的 header 类型

我们为<int-xml:xpath-header-enricher>header子元素引入了header-type属性。此属性为标头值提供目标类型(XPath 表达式求值的结果被转换为该标头值)。有关更多信息,请参见XPath 报头 Enricher

# Object to JSON Transformer:Node Result

我们为<int:object-to-json-transformer>引入了result-type属性。此属性为将对象映射到 JSON 的结果提供目标类型。它支持STRING(默认值)和NODE。有关更多信息,请参见[自版本 3.0 起, Spring Integration 还提供了用于表达式的内置#xpathspel 函数。](./Transformer.html#Transformer-XPath-Spel-function)。

# JMS 头映射

现在,DefaultJmsHeaderMapper将传入的JMSPriority标头映射到 Spring Integrationpriority标头。以前,priority仅被考虑用于出站消息。有关更多信息,请参见映射消息头到和来自 JMS 消息

# JMS 出站通道适配器

JMS 出站通道适配器现在支持session-transacted属性(默认:false)。以前,你必须插入自定义的JmsTemplate才能使用事务。见出站通道适配器

# JMS 入站通道适配器

JMS 入站通道适配器现在支持session-transacted属性(默认:false)。以前,你必须插入自定义的JmsTemplate才能使用事务。适配器允许在acknowledgeMode中进行“事务处理”,这是不正确的,并且不工作。这个值不再被允许。见入站通道适配器

# 数据类型通道

现在,你可以指定一个MessageConverter,用于在数据类型通道中将有效载荷转换为已接受的datatype实例之一时使用。有关更多信息,请参见数据类型通道配置

# 更简单的重试建议配置

我们添加了简化的名称空间支持来配置RequestHandlerRetryAdvice。有关更多信息,请参见配置重试建议

# 相关端点:基于时间的发布策略

我们将互斥的group-timeoutgroup-timeout-expression属性添加到<int:aggregator><int:resequencer>中。这些属性允许强制完成部分MessageGroup,前提是ReleaseStrategy不释放一个组并且在指定的时间内没有进一步的消息到达。有关更多信息,请参见使用 XML 配置聚合器

# Redis 元数据存储

RedisMetadataStore现在实现ConcurrentMetadataStore,例如,在多个应用程序实例或服务器环境中的AbstractPersistentAcceptOnceFileListFilter实现中使用它。有关更多信息,请参见Redis 元数据存储读取文件FTP 入站通道适配器SFTP 入站通道适配器

# JdbcChannelMessageStorePriorityChannel

tJdbcChannelMessageStore现在实现PriorityCapableChannelMessageStore,让它被用作message-store实例的priority-queue引用。有关更多信息,请参见支持消息通道

# AMQP 端点交付模式

Spring 默认情况下,AMQP 在代理上创建持久性消息。你可以通过设置amqp_deliveryMode标头或自定义映射程序来重写此行为。我们向适配器添加了一个方便的default-delivery-mode属性,以提供对这一重要设置的更简单配置。有关更多信息,请参见出站通道适配器出站网关

# FTP 超时

现在DefaultFtpSessionFactory公开了connectTimeoutdefaultTimeoutdataTimeout属性,从而避免了需要子类工厂来设置这些公共属性。对于更高级的配置,postProcess*方法仍然可用。有关更多信息,请参见FTP Session Factory

# 推特:StatusUpdatingMessageHandler

StatusUpdatingMessageHandler<int-twitter:outbound-channel-adapter>)现在支持tweet-data-expression属性来构建用于更新时间轴状态的org.springframework.social.twitter.api.TweetData对象。例如,此功能允许附加图像。有关更多信息,请参见Spring Integration Social Twitter (opens new window)

# JPA 检索网关:id-expression

我们为<int-jpa:retrieving-outbound-gateway>引入了id-expression属性来执行EntityManager.find(Class entityClass, Object primaryKey)。有关更多信息,请参见检索出站网关

# TCP 反序列化事件

当一个标准的反序列化器遇到将输入流解码为消息的问题时,它现在会发出TcpDeserializationExceptionEvent,让应用程序在发生异常的地方检查数据。有关更多信息,请参见TCP 连接事件

# 上的消息传递注释@Bean定义

现在,你可以在@Bean中的@ServiceActivator@Router@InboundChannelAdapter和其他定义上配置消息传递注释(@Configuration类)。有关更多信息,请参见注释支持

# 2.2 和 3.0 之间的变化

有关可能影响应用程序的重要更改,请参见迁移指南 (opens new window)。你可以在wiki (opens new window)上找到所有回到 2.1 版本的迁移指南。

# 新组件

3.0 版本增加了一些新的组件。

# HTTP 请求映射

HTTP 模块现在为入站端点提供了强大的请求映射支持。我们将UriPathHandlerMapping类替换为IntegrationRequestMappingHandlerMapping类,该类在应用程序上下文中以 Bean 名integrationRequestMappingHandlerMapping注册。在解析 HTTP 入站端点时,要么注册一个新的IntegrationRequestMappingHandlerMapping Bean,要么重用一个现有的 Bean。为了实现灵活的请求映射配置, Spring 集成为<request-mapping/><http:inbound-gateway/>提供了<request-mapping/>的子元素。这两个 HTTP 入站端点现在完全基于 Spring MVC3.1 中引入的请求映射基础设施。例如,在单个入站端点上支持多个路径。有关更多信息,请参见HTTP 命名空间支持

# Spring 表达式语言配置

我们添加了一个新的IntegrationEvaluationContextFactoryBean,以允许在整个框架的 SPEL 表达式中配置自定义PropertyAccessor实现和函数。有关更多信息,请参见Spring Expression Language (SpEL)

# spel 函数支持

为了使用静态Method函数定制 SPELEvaluationContext函数,我们引入了<spel-function/>组件。我们还添加了两个内置函数:#jsonPath#xpath。有关更多信息,请参见SPEL 函数

# spel PropertyAccessors 支持

为了使用PropertyAccessor实现来定制 SPELEvaluationContext,我们添加了<spel-property-accessors/>组件。有关更多信息,请参见属性访问器

# Redis:新组件

我们添加了一个新的基于 Redis 的[MetadataStore](https://DOCS. Spring.io/ Spring-integration/api/org/springframework/integration/metadata/metadatastore.html)实现。你可以使用RedisMetadataStore在应用程序重新启动时维护MetadataStore的状态。这个新的MetadataStore实现可以与适配器一起使用,例如:

  • Twitter 入站适配器

  • 馈入入通道适配器

我们添加了新的基于队列的组件。我们添加了<int-redis:queue-inbound-channel-adapter/><int-redis:queue-outbound-channel-adapter/>组件,分别在 Redis 列表上执行“右 pop”和“左 push”操作。

有关更多信息,请参见“Redis 支持”。

# header 通道注册表

现在,你可以指示框架在注册表中存储应答通道和错误通道,以便以后进行解析。这对于replyChannelerrorChannel可能丢失的情况很有用(例如,在序列化消息时)。有关更多信息,请参见页眉 Enricher

# MongoDB 支持:newConfigurableMongoDbMessageStore

除了现有的eMongoDbMessageStore,我们还引入了一个新的ConfigurableMongoDbMessageStore。这为 MongoDB 提供了一个更加健壮和灵活的MessageStore实现。它与现有的存储不具有向后兼容性,但我们建议将其用于新的应用程序。现有的应用程序可以使用它,但是旧商店中的消息不可用。有关更多信息,请参见MongoDB 支持

# syslog 支持

Spring Integration3.0 以 2.2SyslogToMapTransformer为基础,引入了UDPTCP入站通道适配器,这些适配器是专门为接收 SYSLOG 消息而定制的。有关更多信息,请参见syslog 支持

# tail支持

我们添加了文件入站通道适配器,该适配器使用tail命令在将行添加到文本文件的末尾时生成消息。见“跟踪”文件

# JMX 支持

我们添加了<int-jmx:tree-polling-channel-adapter/>。这个适配器查询 JMX MBean 树,并发送一条带有有效负载的消息,该负载是与查询匹配的对象的图形。默认情况下,MBean 映射到原语和简单对象(例如MapList和数组)。它允许对例如 JSON 进行简单的转换。

现在,IntegrationMBeanExporter允许使用naming-strategy属性配置自定义的ObjectNamingStrategy

有关更多信息,请参见JMX 支持

# TCP/IP 连接事件和连接管理

TcpConnection实例现在在连接打开或关闭或发生异常时发出ApplicationEvent实例(特别是TcpConnectionEvent实例)。此更改使应用程序能够通过使用正常的 Spring ApplicationListener机制被告知对 TCP 连接的更改。

我们将AbstractTcpConnection更名为TcpConnectionSupport。作为这个类的子类的自定义连接可以使用它的方法来发布事件。类似地,我们将AbstractTcpConnectionInterceptor重命名为TcpConnectionInterceptorSupport

此外,我们添加了<int-ip:tcp-connection-event-inbound-channel-adapter/>。默认情况下,此适配器将所有TcpConnectionEvent实例发送到Channel

此外,TCP 连接工厂现在提供了一种名为getOpenConnectionIds()的新方法,该方法返回所有打开连接的标识符的列表。它允许应用程序广播到所有开放的连接,以及其他用途。

最后,连接工厂还提供了一种名为closeConnection(String connectionId)的新方法,该方法允许应用程序通过使用其 ID 显式地关闭连接。

有关更多信息,请参见TCP 连接事件

# 入站通道适配器脚本支持

<int:inbound-channel-adapter/>现在支持使用<expression/><script/>子元素来创建MessageSource。见通道适配器表达式和脚本

# Content Enricher:Headers Enrichment 支持

Content Enricher 现在提供了<header/>子元素的配置,以根据来自底层消息流的回复消息使用头来丰富出站消息。有关更多信息,请参见有效载荷 Enricher

# 一般变化

本节介绍从 2.2 版到 3.0 版的一般更改。

# 消息 ID 生成

以前,消息 ID 是通过使用 JDKUUID.randomUUID()方法生成的。有了这个版本,默认的机制已经改变,使用了更有效和显著更快的算法。此外,我们还添加了更改用于生成消息 ID 的策略的功能。有关更多信息,请参见消息 ID 生成

# “<gateway>”变化

现在,你可以在所有网关方法中设置公共标头,并且我们还添加了更多选项,用于向消息中添加有关调用了哪个方法的信息。

现在,你可以完全自定义将网关方法调用映射到消息的方式。

GatewayMethodMetadata现在是一个公共类。它允许你以编程方式配置来自 Java 的GatewayProxyFactoryBean

有关更多信息,请参见消息传递网关

# http 端点变更
  • 出站端点encode-uri:<http:outbound-gateway/><http:outbound-channel-adapter/>现在提供一个encode-uri属性,允许在发送请求之前禁用 URI 对象的编码。

  • 入站端点merge-with-default-converters:<http:inbound-gateway/><http:inbound-channel-adapter/>现在具有一个merge-with-default-converters属性,以在自定义消息转换器之后包括默认HttpMessageConverter实例的列表。

  • **If-Modified-SinceIf-Unmodified-Sincehttp 报头 **:以前,If-Modified-SinceIf-Unmodified-Sincehttp 报头在DefaultHttpHeaderMapper映射的 http 报头中被错误地处理。现在,除了纠正这个问题外,DefaultHttpHeaderMapper还为任何接受日期时间值的 HTTP 头提供了格式化字符串的日期解析。

  • 入站端点表达式变量:除了现有的#requestParams#pathVariables之外,<http:inbound-gateway/><http:inbound-channel-adapter/>现在还支持额外的有用变量:#matrixVariables#requestHeaders,以及#cookies。这些变量在有效负载表达式和报头表达式中都可用。

  • 出站端点“uri-variables-expression”:HTTPoutendpoints 现在支持<gtr="1687"/>属性,以指定<gtr="1688"/>,从而为 URL 模板中的所有 URI 变量占位符计算<gtr="1689"/>。这允许基于传出消息选择不同的表达式映射。

有关更多信息,请参见HTTP 支持

# Jackson 支持
  • 介绍了一种新的 JSON 转换抽象方法。 Classpath 当前提供了用于 Jackson1.x 和 Jackson2 的实现方式,其版本是通过存在于 Classpath 上来确定的。在此之前,只支持 Jackson1.x。

  • ObjectToJsonTransformerJsonToObjectTransformer现在发出/消耗包含类型信息的头。

有关更多信息,请参见变压器中的“JSON Transformers”。

# 链元素id属性

以前,<chain>中元素的id属性被忽略,并且在某些情况下被禁止。现在,id属性对于<chain>中的所有元素都是允许的。 Bean 链元素的名称是周围链的id和元素本身的id的组合。例如:“mychain$child.myTransformer.handler”。有关更多信息,请参见消息处理程序链

# 聚合器“empty-group-min-timeout”属性

AbstractCorrelatingMessageHandler提供了一个名为empty-group-min-timeout的新属性,以允许空组到期在比到期部分组更长的时间表上运行。空组不会从MessageStore中删除,直到至少在此毫秒内未对其进行修改。有关更多信息,请参见使用 XML 配置聚合器

# 持久文件列表过滤器

使用持久性MetadataStore的新FileListFilter实现现在可用。你可以使用这些功能来防止系统重新启动后出现重复文件。有关更多信息,请参见读取文件FTP 入站通道适配器SFTP 入站通道适配器

# 脚本支持:变量更改

我们为脚本组件引入了一个新的variables属性。此外,内联脚本现在也允许变量绑定。有关更多信息,请参见Groovy 支持脚本支持

# 直接通道负载平衡配置

以前,在通道的LoadBalancingStrategy子元素上配置dispatcher时,唯一可用的选项是使用预定义的值枚举,这不允许开发人员设置LoadBalancingStrategy的自定义实现。现在可以使用load-balancer-ref提供对LoadBalancingStrategy的自定义实现的引用。有关更多信息,请参见[DirectChannel]。

# 发布订阅行为

在此之前,发送到没有订阅服务器的 <publish-subscribe-channel/>将返回false结果。如果与MessagingTemplate一起使用,这将导致抛出异常。现在,PublishSubscribeChannel有一个名为minSubscribers的属性(默认值:0)。如果消息至少发送到最小数量的订阅服务器,则认为发送操作成功(即使该数量为零)。如果应用程序希望在这些情况下获得异常,请将最小订阅服务器设置为至少 1。

# ftp、sftp 和 ftps 的变化

默认情况下,FTP、SFTP 和 FTPS 端点不再缓存会话。

我们从所有端点删除了不推荐的cached-sessions属性。以前,由该属性的值控制的嵌入式缓存机制并不提供一种限制缓存大小的方法,而缓存的大小可能会无限增长。Release2.1 引入了CachingConnectionFactory,它成为了缓存会话的首选(现在也是唯一的)方式。

CachingConnectionFactory现在提供了一种新的方法:resetCache()。此方法会立即关闭空闲会话,并导致在使用中的会话在返回到缓存时关闭。

DefaultSftpSessionFactory(与CachingSessionFactory一起使用)现在支持在单个 SSH 连接上的多路复用通道(仅支持 SFTP)。

# FTP、SFTP 和 FTPS 入站适配器

以前,无法覆盖用于处理从远程服务器检索的文件的默认过滤器。filter属性决定检索哪些文件,但FileReadingMessageSource使用AcceptOnceFileListFilter。这意味着,如果以与先前复制的文件相同的名称检索文件的新副本,则适配器不会发送任何消息。

在这个版本中,一个新的属性local-filter允许你覆盖缺省过滤器(例如,使用AcceptAllFileListFilter或其他一些自定义过滤器)。

如果你希望在 JVM 执行中维护AcceptOnceFileListFilter的行为,那么现在可以在文件系统上配置一个保留状态的自定义过滤器。

入站通道适配器现在支持preserve-timestamp属性,该属性将本地文件修改后的时间戳设置为来自服务器的时间戳(默认:false)。

# FTP、SFTP 和 FTPS 网关

网关现在支持mv命令,从而可以重命名远程文件。

网关现在支持递归的lsmget命令,从而能够检索远程文件树。

网关现在支持putmput命令,从而能够将文件发送到远程服务器。

现在支持local-filename-generator-expression属性,从而能够在检索过程中对本地文件进行命名。默认情况下,使用与远程文件相同的名称。

现在支持local-directory-expression属性,从而能够在检索过程中(基于远程目录)命名本地目录。

# 远程文件模板

在 FTP 和 SFTP 模块使用的Session实现上提供了一个新的高级抽象(RemoteFileTemplate)。虽然端点在内部使用它,但你也可以以编程方式使用此抽象。与所有 Spring 实现方式一样,它可靠地关闭底层会话,同时允许对会话的低级访问。

有关更多信息,请参见FTP/FTPS 适配器SFTP 适配器

# 用于出站网关的“requires-reply”属性

所有出站网关(例如<jdbc:outbound-gateway/><jms:outbound-gateway/>)都是为“请求-回复”场景设计的。期望从外部服务获得响应,并将其发布到reply-channelreplyChannel消息头。然而,在某些情况下,外部系统可能并不总是返回一个结果(例如,当一个 SELECT 以一个空的ResultSet结束时,一个<jdbc:outbound-gateway/>或者一个单向 Web 服务)。因此,开发人员需要一个选项来配置是否需要回复。为此,我们为出站网关组件引入了requires-reply属性。在大多数情况下,requires-reply的默认值是true。如果没有结果,则抛出一个ReplyRequiredException。将值更改为false意味着,如果外部服务不返回任何东西,消息流将在该点结束,类似于出站通道适配器。

WebService 出站网关有一个名为ignore-empty-responses的附加属性,
它用于将一个空的String响应视为没有收到响应,
默认情况下,它是true,但是,你可以将它设置为false,以允许应用程序在回复消息有效负载中接收空的String
当属性为true时,出于requires-reply属性的目的,空字符串将被视为无响应。,默认情况下,
,对于 WebService 出站网关,requires-reply为 false。

请注意,requiresReply属性以前存在,但在AbstractReplyProducingMessageHandler中设置为false,并且无法通过使用 XML 命名空间在出站网关上配置它。

以前,没有收到回复的网关将静默地结束流(带有调试日志消息)。
默认情况下,通过此更改,大多数网关现在都会引发异常。
要恢复到以前的行为,请将requires-reply设置为false
# AMQP 出站网关报头映射

在此之前,<int-amqp:outbound-gateway/>在调用消息转换器之前映射头文件,并且转换器可以覆盖诸如content-type之类的头文件。出站适配器映射转换后的头,这意味着使用出站content-type(如果存在)中的Message之类的头。

从这个版本开始,网关现在映射消息转换后的头,与适配器保持一致。如果你的应用程序依赖于以前的行为(在此情况下,转换器的标头会覆盖映射的标头),那么你需要过滤这些标头(在消息到达网关之前),或者适当地设置它们。受SimpleMessageConverter影响的头是content-typecontent-encoding。自定义消息转换器可以设置其他头。

# 存储过程组件的改进

对于标准CallableStatement.getObject方法不支持的更复杂的特定于数据库的类型,我们向带有外向的<sql-parameter-definition/>元素引入了两个新的附加属性:

  • type-name

  • return-type

存储过程入站通道适配器的row-mapper属性<returning-resultset/>子元素现在支持对RowMapper Bean 定义的引用。以前,它只包含一个类名(仍然支持)。

有关更多信息,请参见存储过程

# Web 服务出站 URI 配置

Web 服务出站网关“URI”属性现在支持对 Spring Web 服务支持的所有 URI 方案的<uri-variable/>替换。有关更多信息,请参见出站 URI 配置

# Redis 适配器更改

Redis 入站通道适配器现在可以为serializer属性使用null值,原始数据是消息有效负载。

Redis 出站通道适配器现在具有topic-expression属性,以在运行时确定Message的 Redis 主题。

除了现有的topics属性外,Redis 入站通道适配器现在还具有topic-patterns属性。

有关更多信息,请参见Redis 支持

# 建议过滤器

以前,当 a<filter/>具有 a<request-handler-advice-chain/>时,丢弃操作全部在建议链的范围内执行(包括discard-channel上的任何下游流)。过滤器元素现在有一个名为discard-within-advice的属性(默认:true),以允许在建议链完成后执行丢弃操作。见建议过滤器

# 使用注释通知端点

现在可以使用注释来配置请求处理程序建议链。见使用注释为端点提供建议

# ObjectToStringTransformer 改进

这个转换器现在将byte[]char[]有效负载正确地转换为String。有关更多信息,请参见变压器

# JPA 支持变更

要持久化或合并的有效负载现在可以是[java.lang.Iterable](https://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html)类型。

在这种情况下,Iterable返回的每个对象都被视为一个实体,并通过使用底层EntityManager进行持久化或合并。迭代器返回的空值将被忽略。

JPA 适配器现在具有额外的属性,以便在执行持久性操作后从关联的持久性上下文中可选地刷新和清除实体。

检索网关没有指定要检索的第一条记录的机制,这是一个常见的用例。检索网关现在支持通过在网关定义中添加first-resultfirst-result-expression属性来指定此参数。有关更多信息,请参见检索出站网关

JPA 检索网关和入站适配器现在具有一个属性,该属性将结果集中的最大结果数指定为表达式。此外,我们引入了max-results属性来替换已被弃用的max-number-of-resultsmax-resultsmax-results-expression分别用于在结果集中提供最大结果数或表达式来计算最大结果数。

有关更多信息,请参见JPA Support

# DeLayer:延迟表达式

以前,<delayer>提供了一个delay-header-name属性来确定运行时的延迟值。在复杂的情况下,<delayer>之前必须加上<header-enricher>。 Spring Integration3.0 引入了expression属性和expression子元素来进行动态延迟确定。现在不推荐delay-header-name属性,因为你可以在expression中指定 header 求值。此外,我们引入了ignore-expression-failures来控制表达式求值失败时的行为。有关更多信息,请参见Delayer

# JDBC 消息存储的改进

Spring Integration3.0 为 MySQL 版本 5.6.4 及更高版本添加了一组新的 DDL 脚本。现在,MySQL 支持小数秒,因此在基于 MySQL 的消息存储中进行轮询时,FIFO 排序得到了改善。有关更多信息,请参见通用的 JDBC 消息存储

# IMAP 空闲连接异常

以前,如果 IMAP 空闲连接失败,它将被记录,但是没有通知应用程序的机制。这样的异常现在生成ApplicationEvent实例。应用程序可以通过使用<int-event:inbound-channel-adapter>或任何ApplicationListener配置为接收ImapIdleExceptionEvent(或其超类之一)来获得这些事件。

# 消息头和 TCP

TCP 连接工厂现在启用了一种灵活机制的配置,可以在 TCP 上传输选定的报头(以及有效负载)。一个新的TcpMessageMapper启用了对头的选择,并且你需要配置一个适当的序列化器或反序列化器来将生成的Map写入 TCP 流。我们添加了MapJsonSerializer作为在 TCP 上传输报头和有效负载的方便机制。有关更多信息,请参见传输头

# JMS 消息驱动通道适配器

以前,在配置<message-driven-channel-adapter/>时,如果希望使用特定的TaskExecutor,则必须声明一个容器 Bean,并通过设置container属性将其提供给适配器。我们添加了task-executor,让它直接在适配器上设置。这是对已经可用的其他几个容器属性的补充。

# RMI 入站网关

RMI 入站网关现在支持error-channel属性。见入站 RMI

# XsltPayloadTransformer

现在可以通过设置transformer-factory-class属性来指定 Transformer 工厂类名称。见[XsltPayloadTransformer](./xml.html#xml-xslt-payload-transformers)

# 2.1 与 2.2 之间的变化

有关可能影响应用程序的重要更改,请参见迁移指南 (opens new window)。你可以在wiki (opens new window)上找到所有回到 2.1 版本的迁移指南。

# 新组件

2.2 版增加了一些新的组件。

# RedisStore入站和出站通道适配器

Spring 集成现在具有RedisStore入站和出站通道适配器,允许你写入和读取与 Redis 集合之间的Message有效负载。有关更多信息,请参见恢复存储出站通道适配器Redis 存储入站通道适配器

# MongoDB 入站和出站通道适配器

Spring 集成现在具有 MongoDB 入站和出站通道适配器,允许你编写和读取与 MongoDB 文档存储之间的Message有效负载。有关更多信息,请参见MongoDB 出站通道适配器MongoDB 入站通道适配器

# JPA 端点

Spring 集成现在包括用于检索和持久化 JPA 实体对象的 Java 持久化 API( JPA)的组件。 JPA 适配器包括以下组件:

有关更多信息,请参见JPA Support

# 一般变动

本部分描述了从版本 2.1 到版本 2.2 的一般更改。

# Spring 3.1 默认使用

Spring 集成现在使用 Spring 3.1。

# 向端点添加行为

向 poller 添加<advice-chain/>的功能已经有一段时间了。然而,由此添加的行为会影响整个集成流。它没有解决向单个端点添加(例如)重试的功能。2.2 版本向许多端点引入了<request-handler-advice-chain/>

此外,我们为此目的添加了三个标准建议类:

  • MessageHandlerRetryAdvice

  • MessageHandlerCircuitBreakerAdvice

  • ExpressionEvaluatingMessageHandlerAdvice

有关更多信息,请参见向端点添加行为

# 事务同步与伪事务

Pollers 现在可以参与 Spring 的事务同步功能。这允许同步诸如由入站通道适配器重命名文件这样的操作,这取决于事务是提交还是回滚。

此外,你可以通过PseudoTransactionManager在不存在“实际”事务的情况下启用这些功能。

有关更多信息,请参见事务同步

# 文件适配器:改进的文件覆盖和追加处理

当使用文件出站通道适配器或文件出站网关时,可以使用新的mode属性。在 Spring Integration2.2 之前,目标文件在它们存在时被替换。现在你可以指定以下选项:

  • REPLACE(默认)

  • APPEND

  • FAIL

  • IGNORE

有关更多信息,请参见处理现有的目标文件

# 回复-超时添加到更多出站网关

XML 名称空间支持将 Reply-Timeout 属性添加到以下出站网关:

  • AMQP 出站网关

  • 文件出站网关

  • FTP 出站网关

  • SFTP 出站网关

  • WS 出站网关

# Spring-AMQP1.1

Spring 集成现在使用 Spring AMQP1.1。这使得能够在 Spring 集成应用程序中使用几个特征,包括以下内容:

  • 出站网关的固定应答队列

  • HA(镜像)队列

  • 发布者确认

  • 返回的消息

  • 支持死信交换和死信队列

# JDBC 支持-存储过程组件
# spel 支持

当使用 Spring 集成 JDBC 适配器的存储过程组件时,现在可以通过使用 Spring 表达式语言提供存储过程名称或存储函数名称。

这样做可以让你指定要在运行时调用的存储过程。例如,你可以提供希望通过消息头执行的存储过程名。有关更多信息,请参见存储过程

# JMX 支持

存储过程组件现在提供了基本的 JMX 支持,将它们的一些属性公开为 MBean:

  • 存储过程名称

  • 存储过程名表达式

  • JdbcCallOperations缓存统计

# JDBC 支持:出站网关

当你使用 JDBC 出站网关时,更新查询不再是强制性的。现在,你可以使用请求消息作为参数源,仅提供一个 SELECT 查询。

# JDBC 支持:通道特定的消息存储实现

我们添加了一个新的消息通道特定的消息存储实现,使用数据库特定的 SQL 查询提供了一个更具可伸缩性的解决方案。有关更多信息,请参见支持消息通道

# 有序关停

我们在IntegrationMBeanExporter中添加了一个名为stopActiveComponents()的方法。 Spring 它允许以有序的方式关闭集成应用程序,不允许向某些适配器发送新的入站消息,并等待一段时间以允许飞行中的消息完成。

# JMS 出站网关改进

现在,你可以将 JMS 出站网关配置为使用MessageListener容器来接收回复。这样做可以提高网关的性能。

# ObjectToJsonTransformer

默认情况下,ObjectToJsonTransformer现在将content-type头设置为application/json。有关更多信息,请参见变压器

# http 支持

默认情况下,HTTP 上的 Java 序列化不再启用。以前,在Serializable对象上设置expected-response-type时,Accept头没有正确设置。我们更新了SerializingHttpMessageConverter,将Accept标头设置为application/x-java-serialized-object。但是,由于这可能会导致与现有应用程序不兼容,因此我们决定不再自动将此转换器添加到 HTTP 端点。

如果希望使用 Java 序列化,则需要通过使用message-converters属性(当你使用 XML 配置时)或使用setMessageConverters()方法(在 Java 中)将SerializingHttpMessageConverter添加到适当的端点。

或者,你也可以考虑使用 JSON。在 Classpath 上有Jackson使其成为可能。

# 2.0 和 2.1 之间的变化

有关可能影响应用程序的重要更改,请参见迁移指南 (opens new window)

# 新组件

版本 2.1 增加了一些新的组件。

# JSR-223 脚本支持

在 Spring Integration2.0 中,我们添加了对Groovy (opens new window)的支持。在 Spring Integration2.1 中,我们通过实现对JSR-223 (opens new window)(“Java 平台的脚本”)的支持,在很大程度上扩展了对其他语言的支持。现在你可以使用任何支持 JSR-223 的脚本语言了,包括:

  • JavaScript

  • Ruby 和 JRuby

  • Python 和 Jython

  • Groovy

详情见脚本支持

# Gemfire 支援

Spring Integration 通过提供用于条目和连续查询事件的入站适配器、用于将条目写入缓存的出站适配器和[](https://DOCS. Spring.io/ Spring-Integration/api/org/SpringAgestore.html)和[](https://DOCS. Spring.io/ Spring-integration/api/api/groupIntegration/org/org/store.html)来提供对的支持。 Spring 集成利用了Spring Gemfire (opens new window)项目,在其组件上提供了一个薄的包装器。

详情见Pivotal Gemfire 和 Apache Geode 支持

# AMQP 支持

Spring Integration2.1 添加了几个用于通过使用高级消息队列协议 (opens new window)接收和发送消息的通道适配器。 Spring 此外,集成还提供了点对点消息通道和发布-订阅消息通道,这两个通道都由 AMQP 交换和队列支持。

详情见AMQP 支持

# MongoDB 支持

在版本 2.1 中, Spring 集成通过提供基于 MongoDB 的MessageStore,为MongoDB (opens new window)提供了支持。

详情见MongoDB 支持

# Redis 支持

从版本 2.1 开始, Spring 集成通过提供基于 REDIS 的MessageStore以及发布-订阅消息适配器,支持Redis (opens new window),这是一种高级的键值存储。

详情见Redis 支持

# 对 Spring 资源抽象的支持

在版本 2.1 中,我们引入了一个新的资源入站通道适配器,该适配器基于 Spring 的资源抽象,以支持跨各种实际类型的底层资源(例如文件、URL 或 Classpath 资源)的更大灵活性。因此,它与文件入站通道适配器类似,但更通用。

详情见资源入站通道适配器

# 存储过程组件

借助 Spring Integration2.1,JDBC模块还通过添加几个新组件来提供存储过程支持,这些组件包括入站和出站通道适配器以及出站网关。存储过程支持利用 Spring 的[SimpleJdbcCall](https://DOCS. Spring.io/ Spring-framework/DOCS/current/javadoc-api/org/springframework/jdbc/core/simplejdbccall.html)类,因此支持以下存储过程:

  • 阿帕奇德比

  • DB2

  • MySQL

  • Microsoft SQL Server

  • 甲骨文

  • PostgreSQL

  • Sybase

存储过程组件还支持以下数据库的 SQL 函数:

  • MySQL

  • Microsoft SQL Server

  • 甲骨文

  • PostgreSQL

详情见存储过程

# XPath 和 XML 验证过滤器

Spring Integration2.1 提供了一种新的基于 XPath 的消息过滤器。它是XML模块的一部分。XPath 过滤器允许你通过使用 XPath 表达式来过滤消息。我们还为 XML 验证过滤器添加了文档。

有关更多详细信息,请参见使用 XPath 过滤器XML 验证过滤器

# 有效载荷 Enricher

自 Spring 集成 2.1 以来,我们添加了有效负载 Enricher。有效负载 Enricher 定义了一个端点,该端点通常将[Message](https://DOCS. Spring.io/ Spring-integration/api/org/springframework/integration/message.html)传递到公开的请求通道,然后期望得到一条回复消息。然后,回复消息将成为表达式求值的根对象,以丰富目标有效负载。

详情见有效载荷 Enricher

# FTP 和 SFTP 出站网关

Spring Integration2.1 提供了两个新的出站网关,以与远程文件传输协议或 SFT 服务器进行交互。这两个网关允许你直接执行一组有限的远程命令。

例如,你可以使用这些出站网关来列出、检索和删除远程文件,并让 Spring 集成消息流继续执行远程服务器的响应。

详情见FTP 出站网关SFTP 出站网关

# ftp会话缓存

从版本 2.1 开始,我们在会话远程文件适配器(例如,FTP、SFTP 和其他)的管理方面展示了更大的灵活性。

具体地说,我们不赞成cache-sessions属性(可通过 XML 名称空间支持获得)。作为替代,我们在CachingSessionFactory上添加了sessionCacheSizesessionWaitTimeout属性。

详情见FTP Session CachingSFTP Session Caching

# 框架重构

我们以多种方式重构了 Spring 集成框架,所有这些都在本节中进行了描述。

# 标准化路由器配置

我们使用 Spring Integration2.1 在所有路由器实现中标准化了路由器参数,以提供更一致的用户体验。

在 Spring Integration2.1 中,我们删除了ignore-channel-name-resolution-failures属性,以便用resolution-required属性合并其行为。另外,resolution-required属性现在默认为true

从 Spring Integration2.1 开始,如果没有定义默认的输出通道,路由器将不再静默地删除任何消息。这意味着,在默认情况下,路由器现在至少需要一个解析通道(如果没有设置default-output-channel),并且在默认情况下,如果没有确定通道(或者发送尝试未成功),则抛出MessageDeliveryException

但是,如果你确实希望静默地删除消息,则可以设置default-output-channel="nullChannel"

Spring 随着路由器参数的标准化和前面描述的参数的合并,旧的基于集成的应用程序可能会中断。

详情见[Routers](./router.html#router)

# XML 模式更新到 2.1

Spring Integration2.1 附带了更新的 XML 模式(版本 2.1)。它提供了许多改进,例如路由器标准化前面讨论过

从现在开始,开发人员必须始终声明最新的 XML 模式(当前版本为 2.1)。或者,他们可以使用无版本模式。通常,最好的选择是使用无版本名称空间,因为这些名称空间自动使用 Spring 集成的最新可用版本。

下面的示例声明了一个无版本 Spring 集成名称空间:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:int="http://www.springframework.org/schema/integration"
   xsi:schemaLocation="http://www.springframework.org/schema/integration
           https://www.springframework.org/schema/integration/spring-integration.xsd
           http://www.springframework.org/schema/beans
           https://www.springframework.org/schema/beans/spring-beans.xsd">
...
</beans>

下面的示例声明了一个具有显式版本的 Spring 集成名称空间:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:int="http://www.springframework.org/schema/integration"
   xsi:schemaLocation="http://www.springframework.org/schema/integration
           https://www.springframework.org/schema/integration/spring-integration-2.2.xsd
           http://www.springframework.org/schema/beans
           https://www.springframework.org/schema/beans/spring-beans.xsd">
...
</beans>

旧的 1.0 和 2.0 模式仍然存在。但是,如果应用程序上下文仍然引用那些不受欢迎的模式之一,则验证器在初始化时将失败。

# 源控制管理和构建基础设施

版本 2.1 引入了对源代码控制管理和构建基础架构的一些更改。这一节涵盖了这些变化。

# 现在托管在 GitHub 上的源代码

自版本 2.0 以来, Spring 集成项目使用Git (opens new window)进行版本控制。为了进一步提高社区可见性,该项目从 SpringSource 托管的 Git 存储库转移到Github (opens new window)。 Spring 集成 Git 存储库位于:spring-integration (opens new window)

对于该项目,我们还改进了提供代码贡献的过程。此外,我们确保每一项承诺都经过同行评审。实际上,核心提交者现在遵循与贡献者相同的过程。有关更多详细信息,请参见贡献 (opens new window)

# 改进了声纳的源代码可见性

为了提供更好的源代码可见性,从而监视 Spring Integration 的源代码的质量,我们设置了Sonar (opens new window)的实例。我们每天晚上收集指标,并在sonar.spring.io (opens new window)上提供这些指标。

# 新样本

对于 Spring 集成的 2.1 版本,我们还扩展了 Spring 集成示例项目,并添加了许多新的示例,例如涵盖 AMQP 支持的示例,一个示例展示了新的有效负载 Enricher,一个示例演示了用于测试 Spring 集成流片段的技术,以及针对 Oracle 数据库执行存储过程的示例。详情请访问spring-integration-samples (opens new window)

# 1.0 和 2.0 版本之间的变化

有关可能影响应用程序的重要更改,请参见迁移指南 (opens new window)

# Spring 3 支持

Spring Integration2.0 是建立在 Spring 3.0.5 之上的,并使其许多功能可供我们的用户使用。

[[2.0-spel-support]]===== 支持 Spring 表达式语言

现在,你可以在 Spring Integration Core 命名空间的 Transformer、Router、Filter、Splitter、Aggregator、Service-Activator、Header-Enrich 和许多其他元素中以及在各种适配器中使用 SPEL 表达式。这本指南包括许多样本。

# 转换服务和转换器

现在可以在配置许多 Spring 集成组件时受益于 Spring 提供的转换服务支持,例如数据类型通道 (opens new window)。见消息通道实现服务激活器。同样,前面提到的 SPEL 支持也依赖于转换服务。因此,你可以注册转换器一次,并在任何使用 SPEL 表达式的地方利用它们。

# TaskSchedulerTrigger

Spring 3.0 定义了两种与调度相关的新策略:TaskSchedulerTrigger。 Spring 集成(它使用大量的调度)现在建立在这些基础上。实际上, Spring Integration1.0 最初定义了一些组件(例如CronTrigger),这些组件现在已经迁移到 Spring 3.0 的核心 API 中。现在,你可以在整个应用程序上下文中重用相同的组件(而不仅仅是 Spring 集成配置)。通过提供用于直接配置速率、延迟、CRON 表达式和触发器引用的属性,我们还极大地简化了 Spring Integration Pollers 的配置。有关示例配置,请参见通道适配器

# RestTemplateHttpMessageConverter

我们的出站 HTTP 适配器现在委托给 Spring 的RestTemplate以执行 HTTP 请求并处理其响应。这也意味着你可以重用任何自定义HttpMessageConverter实现。有关更多详细信息,请参见HTTP 出站组件

# Enterprise 集成模式添加

同样在 2.0 中,我们增加了对 Hohpe 和 Woolf 的Enterprise 整合模式 (opens new window)书中描述的更多模式的支持。

# 消息历史记录

我们现在提供对消息历史 (opens new window)模式的支持,让你跟踪所有遍历的组件,包括每个通道和端点的名称以及遍历的时间戳。有关更多详细信息,请参见消息历史

# 消息存储

我们现在为消息存储 (opens new window)模式提供支持。消息存储提供了一种策略,用于代表其作用域超出单个事务的任何进程(例如聚合器和重排序程序)持久化消息。本指南的许多部分包括如何使用消息存储的示例,因为它会影响 Spring 集成的几个领域。更多详情请参见消息存储索赔检查消息通道AggregatorJDBC 支持“,以及重测序器

# 索赔检查

我们添加了索赔检查 (opens new window)模式的实现。索赔检查模式背后的想法是,你可以将消息有效载荷交换为“索赔票据”。这使你可以减少带宽,并避免跨通道发送消息时潜在的安全问题。有关更多详细信息,请参见索赔检查

# 控制总线

我们已经提供了控制总线 (opens new window)模式的实现,它允许你使用消息传递来管理和监视端点和通道。这些实现包括基于 SPEL 的方法和运行 Groovy 脚本的方法。有关更多详细信息,请参见控制总线控制总线

# 新通道适配器和网关

在 Spring Integration2.0 中,我们添加了几个新的通道适配器和消息传递网关。

# TCP 和 UDP 适配器

我们添加了用于通过 TCP 和 UDP Internet 协议接收和发送消息的通道适配器。有关更多详细信息,请参见TCP 和 UDP 支持。另见以下博客:“Using UDP and TCP Adapters in Spring Integration 2.0 M3” (opens new window)

# Twitter 适配器

Twitter 适配器支持发送和接收 Twitter 状态更新以及直接消息。你还可以使用入站通道适配器执行 Twitter 搜索。有关更多详细信息,请参见Spring Integration Social Twitter (opens new window)

# XMPP 适配器

新的 XMPP 适配器支持聊天消息和存在事件。有关更多详细信息,请参见XMPP 支持

# FTP 和 FTPS 适配器

通过 FTP 和 FTPS 的入站和出站文件传输支持现在可用。有关更多详细信息,请参见FTP/FTPS 适配器

# SFTP 适配器

通过 SFTP 的入站和出站文件传输支持现在可用。有关更多详细信息,请参见SFTP 适配器

# 提要适配器

我们还添加了用于接收新闻提要的通道适配器(Atom 和 RSS)。有关更多详细信息,请参见馈源适配器

# 其他添加项

Spring 集成添加了许多其他功能。这一节对它们进行了描述。

# Groovy 支持

Spring Integration2.0 增加了 Groovy 支持,允许你使用 Groovy 脚本语言来提供集成和业务逻辑。有关更多详细信息,请参见Groovy 支持

# 地图变形金刚

这些对称的转换器将有效负载对象转换为Map对象。有关更多详细信息,请参见变压器

# JSON 变形金刚

这些对称的转换器将有效负载对象转换成 JSON 和 JSON。有关更多详细信息,请参见变压器

# 连载变形金刚

这些对称的转换器将有效负载对象与字节数组进行转换。它们还支持 Spring 3.0.5 添加的序列化器和反序列化器策略接口。有关更多详细信息,请参见变压器

# 框架重构

核心 API 进行了一些重要的重构,以使其更简单、更可用。尽管我们预计对开发人员的影响应该是最小的,但你应该通读本文档以找到更改的内容。具体地说,你应该阅读动态路由器消息传递网关HTTP 出站组件Message,以及Aggregator。如果直接依赖一些核心组件(MessageMessageHeadersMessageChannelMessageBuilder等),则需要更新任何导入语句。我们重组了一些打包,以提供扩展域模型所需的灵活性,同时避免任何周期性的依赖关系(这是框架的一项策略,以避免此类“混乱”)。

# 新的源代码控制管理和构建基础架构

在 Spring Integration2.0 中,我们将构建环境转换为使用 Git 进行源代码控制。要访问我们的存储库,请访问https://git.springsource.org/spring-integration (opens new window)。我们还将构建系统切换到Gradle (opens new window)

# 新 Spring 集成样本

在 Spring Integration2.0 中,我们已经将样本与我们的主发布分布进行了解耦。请阅读以下博客获取更多信息:New Spring Integration Samples (opens new window)。我们还创建了许多新的示例,包括每个新适配器的示例。

# 用于 Spring 集成的工具套件可视化编辑器

在最新版本的 SpringSource 工具套件中包含一个用于 Spring 集成的令人惊讶的新可视化编辑器。如果你还没有使用 STS,你可以在Spring Tool Suite (opens new window)下载它。