更改历史

5.3 和 5.4 之间的变化

新组件

Apache Kafka 的通道适配器

独立的Spring Integration for Apache Kafka项目已作为spring-integration-kafka模块合并到该项目中。

KafkaProducerMessageHandler sendTimeoutExpression默认值已更改。

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

有关更多信息,请参阅Spring for Apache Kafka 支持

R2DBC 通道适配器

已经引入了用于 R2DBC 数据库交互的通道适配器。有关详细信息,请参阅R2DBC 支持

Redis 流支持

引入了用于 Redis 流支持的通道适配器。有关更多信息,请参阅Redis 流出站通道适配器

可再生锁登记处

引入了可更新锁注册表以允许更新分布式锁的租约。有关更多信息,请参阅JDBC 实现

ZeroMQ 支持

ZeroMqChannel,ZeroMqMessageHandlerZeroMqMessageProducer已介绍。有关更多信息,请参阅ZeroMQ 支持

一般变更

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

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

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

被千分尺取代的旧指标已被删除。

线程屏障现在有两个单独的超时选项:requestTimeouttriggerTimeout.

TCP/UDP 更改

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

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

RMI 变更

spring-integration-rmi模块已弃用,没有替换,将在下一个主要版本中删除。有关详细信息,请参阅RMI 支持

AMQP 变更

出站端点现在具有处理发布者确认和返回的新机制。有关更多信息,请参阅发布商确认和退货的替代机制。

一个新BatchMode.EXTRACT_PAYLOAD_WITH_HEADERS的由AmqpInboundChannelAdapter. 有关详细信息,请参阅入站通道适配器

邮件更改

现在AbstractMailReceiver可以按MimeMessage原样生产,而无需急切地获取其内容。有关详细信息,请参阅邮件接收通道适配器

5.2 和 5.3 之间的变化

新组件

集成模式

引入了IntegrationPattern抽象来指示IntegrationPatternTypeSpring Integration 组件属于哪个企业集成模式(an )和类别。有关此抽象及其用例的更多信息,请参阅其 JavaDocs 和集成图。

ReactiveMessageHandler

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

ReactiveMessageSourceProducer

ReactiveMessageSourceProducer是一个响应式实现,MessageProducerSupport用于将提供的内容包装MessageSourceFlux按需receive()调用中。有关更多信息,请参阅反应式流支持

Java DSL 扩展

引入了一个新的IntegrationFlowExtensionAPI,以允许使用自定义或组合的 EIP 运算符扩展现有的 Java DSL。这也可用于为任何开箱即用的IntegrationComponentSpec扩展引入定制器。有关详细信息,请参阅DSL 扩展

科特林 DSL

引入了用于集成流配置的 Kotlin DSL。有关更多信息,请参阅Kotlin DSL 章节

ReactiveRequestHandlerAdvice

提供AReactiveRequestHandlerAdvice来定制Mono来自消息处理程序的回复。有关更多信息,请参阅反应式建议

HandleMessageAdviceAdapter

提供AHandleMessageAdviceAdapter来包装任何MethodInterceptor用于应用的MessageHandler.handleMessage()而不是默认AbstractReplyProducingMessageHandler.RequestHandler.handleRequestMessage()行为。有关详细信息,请参阅处理消息通知

MongoDB 反应式通道适配器

spring-integration-mongodb模块现在为 Spring Data 中的 Reactive MongoDb 驱动程序支持提供通道适配器实现。此外,MongoDb 更改流支持的反应式实现与MongoDbChangeStreamMessageProducer. 有关更多信息,请参阅MongoDB 支持

接收消息通知

ReceiveMessageAdvice专门为代理引入了一个特殊的MessageSource.receive()PollableChannel.receive(). 有关详细信息,请参阅智能轮询

一般变更

默认情况下,网关代理现在不代理default方法。有关详细信息,请参阅调用default方法

内部组件(例如_org.springframework.integration.errorLogger)现在在集成图中表示时具有缩短的名称。有关详细信息,请参阅集成图

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

Java DSL 中添加了一个publishSubscribeChannel()基于BroadcastCapableChanneland的新运算符。BroadcastPublishSubscribeSpec当我们将子流配置为代理支持的通道(如 等)的 pub-sub 订阅者时,此流畅的 API 具有其优势。有关更多信息SubscribableJmsChannelSubscribableRedisChannel请参阅子流支持

Spring Integration 中的事务支持现在还包括配置 a ReactiveTransactionManagerif a MessageSourceor MessageHandlerimplementation 产生响应类型以供有效负载发送的选项。有关TransactionInterceptorBuilder更多信息,请参阅。另请参阅反应式事务

Java DSL 中添加了一个无需创建显式通道intercept()即可注册实例的新运算符。ChannelInterceptor有关详细信息,请参阅运算符拦截()

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

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

AMQP 变更

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

入站通道适配器现在支持consumerBatchEnabled属性设置为的侦听器容器true。请参阅AMQP 入站通道适配器

HTTP 更改

上的encodeUri属性AbstractHttpRequestExecutingMessageHandler已被弃用,取而代之的是新引入的encodingMode。有关更多信息,请参阅DefaultUriBuilderFactory.EncodingModeJavaDocs 和控制 URI 编码。这也会影响WebFluxRequestExecutingMessageHandler各自的 Java DSL 和 XML 配置。相同的选项被添加到AbstractWebServiceOutboundGateway.

Web 服务更改

为 Web 服务组件添加了 Java DSL 支持。上的encodeUri属性AbstractWebServiceOutboundGateway已被弃用,取而代之的是新引入的encodingMode- 类似于上面的 HTTP 更改。有关详细信息,请参阅Web 服务支持

TCP 更改

默认情况下FailoverClientConnectionFactory,不再故障回复,直到当前连接失败。有关详细信息,请参阅TCP 故障转移客户端连接工厂

现在TcpOutboundGateway支持异步请求/回复。有关详细信息,请参阅TCP 网关

您现在可以配置客户端连接以对新连接执行一些任意测试。有关详细信息,请参阅测试连接

RSocket 更改

decodeFluxAsUnit已添加一个选项RSocketInboundGateway,其含义是将传入Flux作为单个单元解码或对其中的每个事件应用解码。有关详细信息,请参阅RSocket 入站网关

动物园管理员的变化

A LeaderInitiatorFactoryBean(以及它的 XML <int-zk:leader-listener>)公开了一个candidate选项以更好地控制Candidate配置。有关更多信息,请参阅领导力事件处理

MQTT 更改

入站通道适配器现在可以配置为让用户控制何时确认消息已送达。有关详细信息,请参阅手动确认

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

(S)FTP 更改

FileTransferringMessageHandler例如用于 FTP 和 SFTP)除了File,byte[]之外,String现在InputStream还支持org.springframework.core.io.Resource. 有关详细信息,请参阅SFTP 支持FTP 支持

文件更改

该模式FileSplitter不再需要杰克逊处理器(或类似的)依赖markersJson项。它使用一个SimpleJsonSerializer简单的字符串表示FileSplitter.FileMarker实例。有关详细信息,请参阅FileSplitter

5.1 和 5.2 之间的变化

包和类更改

Pausable已从o.s.i.endpoint移至o.s.i.core

行为改变

有关此版本中的行为更改,请参阅迁移指南。

新组件

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配置选项。有关详细信息,请参阅拆分器

控制总线现在可以处理Pausable(扩展Lifecycle)操作。有关详细信息,请参阅控制总线

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

框架中抛出的所有MessageHandlingExceptions,现在包括一个 bean 资源和源,用于在不涉及最终用户代码的情况下回溯配置部分。有关详细信息,请参阅错误处理

为了获得更好的最终用户体验,Java DSL 现在提供了一个配置器变体,用于使用网关接口启动流程。有关更多信息,请参阅IntegrationFlows.from(Class<?> serviceInterface, Consumer<GatewayProxySpec> endpointConfigurer)JavaDocs。aMethodArgsHolder现在也是 . 中所有表达式的评估上下文的根对象GatewayProxyFactoryBean。和评估上下文变量现在已弃用#args#method有关详细信息,请参阅消息传递网关

AMQP 变更

现在可以将出站端点配置为在超时内未收到发布者确认时合成“nack”。有关详细信息,请参阅出站通道适配器

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

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

文件更改

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

TCP 更改

ByteArrayLengthHeaderSerializer除了有效负载之外,现在可以使用的长度标头还包括标头的长度。有关详细信息,请参阅消息划分(序列化程序和反序列化程序)

使用 aTcpNioServerConnectionFactory时,现在优先接受新连接而不是从现有连接中读取,但它是可配置的。有关详细信息,请参阅关于非阻塞 I/O (NIO)

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

客户端连接工厂现在支持connectTimeout如果当时未建立连接,则会引发异常。有关详细信息,请参阅TCP 连接工厂

SoftEndOfStreamException现在是 aRuntimeException而不是扩展IOException.

邮件更改

现在AbstractMailReceiver有一个autoCloseFolder选项(true默认情况下),在获取后禁用自动文件夹关闭,但填充IntegrationMessageHeaderAccessor.CLOSEABLE_RESOURCE标题而不是下游交互。有关详细信息,请参阅邮件接收通道适配器

HTTP 更改

HTTP 入站端点现在支持请求有效负载验证。有关详细信息,请参阅HTTP 支持

WebFlux 更改

现在WebFluxRequestExecutingMessageHandler支持Publisher,ResourceMultiValueMap作为请求消息payload。现在WebFluxInboundEndpoint支持请求有效负载验证。有关更多信息,请参阅WebFlux 支持

MongoDb 更改

现在MongoDbMessageStore可以使用自定义转换器进行配置。有关更多信息,请参阅MongoDB 支持

路由器更改

您现在可以禁用回退到通道键作为通道 bean 名称。有关详细信息,请参阅动态路由器

FTP/SFTP 更改

theRotatingServerAdvice现在与 theRotationPolicy和 its分离StandardRotationPolicy

远程文件信息,包括主机/端口和目录现在包含在AbstractInboundFileSynchronizingMessageSourceAbstractRemoteFileStreamingMessageSource实现中的消息头中。此信息也包含在实现的读取操作结果的标头中AbstractRemoteFileOutboundGateway。FTP 出站端点现在支持chmod更改上传文件的权限。(SFTP 自 4.3 版起已支持它)。有关详细信息,请参阅FTP(S) 支持SFTP 支持

5.0 和 5.1 之间的变化

新组件

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

AmqpDedicatedChannelAdvice

请参阅严格消息排序

改进的功能支持

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

@LongRunningTest

提供了一个 JUnit 5@LongRunningTest条件注释来检查RUN_LONG_INTEGRATION_TESTS具有值的条目的环境或系统属性,true以确定是否应该运行或跳过测试。

请参阅JUnit 规则和条件

一般变更

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

Java DSL

现在IntegrationFlowContext是一个接口并且IntegrationFlowRegistration是 的一个内部接口IntegrationFlowContext

logAndReply()当您希望在请求-回复配置的流程结束时登录时,为了方便起见,引入了一个新的运算符。这避免了与log()哪个被视为单向端流组件的混淆。

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

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

调度程序异常

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

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

  • 所有其他异常都包含在MessageDeliveryException带有failedMessage属性集的 a 中。

之前:

  • MessagingException具有属性的任何类型的AfailedMessage被重新抛出不变

  • MessagingException没有failedMessage属性的 A被包含在MessagingException具有failedMessage属性集的 a 中。

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

  • 已检查的异常被包装在MessageDeliveryException带有failedMessage属性集的 a 中。

全局通道拦截器

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

通道拦截器

ChannelInterceptor.postReceive()没有收到消息时不再调用;不再需要检查null Message<?>. 以前,该方法被调用。如果您有一个依赖于先前行为的拦截器,请afterReceiveCompleted()改为实现,因为该方法被调用,无论是否接收到消息。此外,PolledAmqpChannelandPolledJmsChannel以前没有调用afterReceiveCompleted()with null; 他们现在这样做了。

ObjectToJsonTransformer

ResultType.BYTESObjectToJsonTransformer. _

有关更多信息,请参阅JSON 转换器。

集成流程:生成的 Bean 名称

从版本 5.0.5 开始,为组件生成的 bean 名称IntegrationFlow包括流 bean 名称,后跟一个点作为前缀。例如,如果流 bean 被命名flowBean,则生成的 bean 可能被命名flowBean.generatedBean

有关更多信息,请参阅使用消息流

聚合器更改

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

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

有关详细信息,请参阅聚合器。

@Publisher 注解更改

从版本 5.1 开始,您必须通过使用或使用子元素 on显式打开@PublisherAOP 功能。还添加了和属性以调整配置。@EnablePublisher<int:enable-publisher><int:annotation-config>proxy-target-classorderProxyFactory

有关详细信息,请参阅使用注释的注释驱动配置@Publisher

文件更改

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

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

有关详细信息,请参阅文件支持

AMQP 变更

我们在. ID_ 有关详细信息,请参阅AMQP 消息标头底部附近的注释。TimestampDefaultAmqpHeaderMapper

现在,contentType标头已正确映射为通用标头映射中的条目。有关详细信息,请参阅contentType 标头

从版本 5.1.3 开始,如果在使用手动确认时发生消息转换异常,并且定义了错误通道,则有效负载是ManualAckListenerExecutionFailedException具有附加channeldeliveryTag属性的。这使错误流能够确认/确认原始消息。有关详细信息,请参阅入站消息转换

JDBC 更改

max-rows-per-pollJDBC Inbound Channel Adapter 和 JDBC Outbound Gateway 上的一个令人困惑的属性已被弃用,取而代之的是新引入的max-rows属性。

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

INT_CHANNEL_MESSAGE表(用于)的索引JdbcChannelMessageStore已经过优化。如果您在此类存储中有大型消息组,您可能希望更改索引。

有关详细信息,请参阅JDBC 支持

FTP 和 SFTP 更改

ARotatingServerAdvice现在可用于使用入站通道适配器轮询多个服务器和目录。有关详细信息,请参阅入站通道适配器:轮询多个服务器和目录入站通道适配器:轮询多个服务器和目录

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

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

CachingSessionFactory一个新属性testSession,当它为真时,会导致工厂在从缓存中检出现有会话时对 执行test()操作。Session

有关详细信息,请参阅SFTP 会话缓存FTP 会话缓存

出站网关 MPUT 命令现在支持带有文件或字符串集合的消息负载。有关详细信息,请参阅SFTP 出站网关FTP 出站网关

TCP 支持

使用 SSL 时,现在默认启用主机验证,以防止使用受信任证书的中间人攻击。有关详细信息,请参阅主机验证

此外,现在可以在DefaultTcpSSLContextSupport.

推特支持

由于 Spring Social 项目已移至生命周期结束状态,因此 Spring Integration 中的 Twitter 支持已移至 Extensions 项目。有关更多信息,请参阅Spring Integration 社交 Twitter

JMS 支持

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

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

HTTP/WebFlux 支持

( statusCodeExpressionand 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".

千分尺支持更改

现在可以更简单地自定义框架创建的标准千分尺。有关详细信息,请参阅千分尺集成

集成图定制

现在可以IntegrationNode通过Function<NamedComponent, Map<String, Object>> additionalPropertiesCallback. IntegrationGraphServer有关详细信息,请参阅集成图

集成全局属性

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

receiveTimeout为_@Poller

@Poller注释现在提供了一个receiveTimeout方便的选项。有关详细信息,请参阅使用@Poller注释

4.3 和 5.0 之间的变化

有关可能影响您的应用程序的重要更改,请参阅迁移指南。您可以在wiki上找到回到 2.1 的所有版本的迁移指南。

新组件

5.0 版添加了许多新组件。

Java DSL

单独的Spring Integration Java DSL项目现已合并到核心 Spring Integration 项目中。通道适配器和网关的IntegrationComponentSpec实现分布在它们的特定模块中。有关Java DSL支持的更多信息,请参阅 Java DSL。另请参阅4.3 到 5.0 迁移指南,了解迁移到 Spring Integration 5.0 所需的步骤。

测试支持

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

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

MongoDB 出站网关

MongoDbOutboundGateway功能允许您通过向其请求通道发送消息来按需查询数据库。

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

WebFlux 网关和通道适配器

我们为 Spring WebFlux 框架网关和通道适配器引入了新的 WebFlux 支持模块。

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

内容类型转换

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

有关详细信息,请参阅内容类型转换

ErrorMessagePublisherErrorMessageStrategy

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

有关详细信息,请参阅错误处理

JDBC 元数据存储

我们添加了实现的 JDBCMetadataStore实现。当您需要确保元数据的事务边界时,这很有用。

有关详细信息,请参阅JDBC 元数据存储

一般变更

Spring Integration 现在完全基于 Spring Framework5.0和 Project Reactor 3.1。不再支持以前的 Project Reactor 版本。

核心变化

@Poller注释现在具有更容易配置基础的errorChannel属性MessagePublishingErrorHandler。有关详细信息,请参阅注释支持

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

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

默认情况下,现在使用 调用 POJO 方法InvocableHandlerMethod,但您可以像以前一样将它们配置为使用 SpEL。有关详细信息,请参阅POJO 方法调用

将 POJO 方法定位为消息处理程序时,您现在可以使用@Default注释标记其中一个服务方法,以便为不匹配的条件提供回退机制。有关详细信息,请参阅配置服务激活器。

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

现在,基于聚合器表达式ReleaseStrategy的表达式针对 的MessageGroup而不是仅针对 的集合求值Message<?>。有关详细信息,请参阅聚合器和 Spring 表达式语言 (SpEL)

您现在可以提供ObjectToMapTransformer定制的JsonObjectMapper.

有关详细信息,请参阅聚合器和 Spring 表达式语言 (SpEL)

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

当候选人未能获得锁时,LockRegistryLeaderInitiatornow 发出一个新的OnFailedToAcquireMutexEventthrough DefaultLeaderEventPublisher。有关Leadership Event Handling更多信息,请参阅。

网关更改

当网关方法具有void返回类型并提供错误通道时,网关现在可以正确设置errorChannel标头。以前,标题未填充。这导致同步下游流(在调用线程上运行)将异常发送到配置的通道,但异步下游流上的异常将被发送到默认值errorChannel

RequestReplyExchanger接口现在有一个throws MessagingException条款来满足提议的消息交换合同。

您现在可以使用 SpEL 表达式指定请求和回复超时。有关详细信息,请参阅消息传递网关

聚合器性能变化

默认情况下,聚合器现在使用SimpleSequenceSizeReleaseStrategy更有效的 a ,尤其是对于大型组。空组现在计划在empty-group-min-timeout. 有关详细信息,请参阅聚合器。

拆分器更改

拆分器组件现在可以处理和拆分 JavaStream和 Reactive StreamsPublisher对象。如果输出通道是 a ReactiveStreamsSubscribableChannel,则为后续迭代AbstractMessageSplitter构建 aFlux而不是常规的Iterator,独立于被拆分的对象。此外,如果可能的话,AbstractMessageSplitter提供protected obtainSizeIfPossible()允许确定Iterable和对象大小的方法。Iterator有关详细信息,请参阅拆分器

JMS 更改

以前,Spring Integration JMS XML 配置使用connectionFactoryJMS 连接工厂的默认 bean 名称,允许从组件定义中省略该属性。我们将其重命名为jmsConnectionFactory,这是 Spring Boot 用于自动配置 JMS 连接工厂 bean 的 bean 名称。

如果您的应用程序依赖于以前的行为,您可以重命名您的connectionFactorybeanjmsConnectionFactory或专门配置您的组件以使用您的 bean 通过使用它的当前名称。有关更多信息,请参阅JMS 支持

邮件更改

呈现 IMAP 邮件内容的一些不一致问题已得到解决。有关详细信息,请参阅“邮件接收通道适配器”部分中的注释

饲料变化

代替com.rometools.fetcher.FeedFetcherROME 中已弃用的 ,我们ResourceFeedEntryMessageSource. 有关详细信息,请参阅馈送适配器

文件更改

我们引入了新的FileHeaders.RELATIVE_PATH消息头来表示FileReadingMessageSource.

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

现在的刷新谓词FileWritingMessageHandler有一个附加参数。

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

他们现在还支持对新写入的文件设置文件权限。

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

现在FileSplitter提供了一个firstLineAsHeader选项,可以在为剩余行发出的消息中携带第一行内容作为标题。

有关详细信息,请参阅文件支持

FTP 和 SFTP 更改

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

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

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

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

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

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

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

入站通道适配器现在可以使用新引入的RecursiveDirectoryScanner. 请参阅FTP 入站通道适配器scanner部分中的选项以进行注入。此外,您现在可以将这些适配器切换到。WatchService

我们将NLST命令添加AbstractRemoteFileOutboundGateway到执行列表文件名远程命令。

您现在可以提供FtpOutboundGatewaywithworkingDirExpression来更改当前请求消息的 FTP 客户端工作目录。

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

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

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

有关详细信息,请参阅FTP/FTPS 适配器SFTP 适配器

集成属性

4.3.2 版添加了一个新的spring.integration.readOnly.headers全局属性,让您可以自定义不应复制到MessageMessageBuilder. 有关详细信息,请参阅全局属性

流变化

我们在 上添加了一个新选项,CharacterStreamReadingMessageSource让它用于“管道”标准输入并在管道关闭时发布应用程序事件。有关更多信息,请参阅从流中读取。

障碍变化

现在BarrierMessageHandler支持一个丢弃通道,迟到的触发消息被发送到该通道。有关详细信息,请参阅线程屏障

AMQP 变更

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

入站端点现在支持 Spring AMQP DirectMessageListenerContainer

可轮询 AMQP 支持的通道现在会阻止轮询器线程配置轮询器receiveTimeout(默认值:一秒)。

由消息转换器添加到消息属性的标头,例如contentType,现在在最终消息中使用。以前,它取决于最终消息中出现的标头和消息属性的转换器类型。要覆盖转换器设置的标头,请将headersMappedLast属性设置为true. 有关更多信息,请参阅AMQP 支持

HTTP 更改

默认情况下,该DefaultHttpHeaderMapper.userDefinedHeaderPrefix属性现在是一个空字符串,而不是X-. 有关详细信息,请参阅HTTP 标头映射

默认情况下,uriVariablesExpression现在使用 a SimpleEvaluationContext(从 5.0.4 开始)。

有关详细信息,请参阅映射 URI 变量

MQTT 更改

入站消息现在使用 、 和 标头映射,RECEIVED_TOPICRECEIVED_QOS避免RECEIVED_RETAINED在应用程序中继消息时无意传播到出站消息。

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

STOMP 变化

ReactorNettyTcpStompClient基于 Project Reactor3.1reactor-netty扩展,我们将 STOMP 模块更改为 use 。根据基金会,我们重命名Reactor2TcpStompSessionManager为。有关更多信息,请参阅STOMP 支持ReactorNettyTcpStompSessionManagerReactorNettyTcpStompClient

Web 服务更改

您现在可以为WebServiceOutboundGateway实例提供外部配置的WebServiceTemplate实例。

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

简单的 WebService 入站和出站网关现在可以处理完整WebServiceMessagepayloadMTOM 附件。

有关详细信息,请参阅Web 服务支持

Redis 变化

现在为 SpEL 表达式RedisStoreWritingMessageHandler提供了额外的基于 - 的设置器(为了方便 Java 配置)。String您现在也可以配置zsetIncrementExpressionon the RedisStoreWritingMessageHandler。此外,由于Redis 命令上的选项是可选的,因此该属性已从 更改true为。falseINCRZADD

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

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

TCP 更改

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

您现在可以配置 TCP 连接工厂以支持PushbackInputStream实例,让反序列化器在“预读”之后“未读”(推回)字节。

我们添加了一个ByteArrayElasticRawDeserializerwithoutmaxMessageSize来根据需要控制和缓冲传入的数据。

有关详细信息,请参阅TCP 和 UDP 支持

宝石火变化

现在GemfireMetadataStore实现,让您通过向商店ListenableMetadataStore提供实例来监听缓存事件。MetadataStoreListener有关更多信息,请参阅Pivotal GemFire 和 Apache Geode 支持

JDBC 更改

现在JdbcMessageChannelStore为 提供了一个 setter ChannelMessageStorePreparedStatementSetter,让您可以自定义商店中的消息插入。

现在ExpressionEvaluatingSqlParameterSourceFactory提供了一个 setter sqlParameterTypes,让您自定义参数的 SQL 类型。

有关详细信息,请参阅JDBC 支持

指标变化
在 5.0.3 版本中对千分尺进行了更改,Meters使其更适合在尺寸系统中使用。在 5.0.4 中进行了进一步的更改。如果您使用 Micrometer,我们建议至少使用 5.0.4 版本。
@EndpointId注释

在 5.0.4 版本中引入,此注解在您使用 Java 配置时提供对 bean 命名的控制。有关更多信息,请参阅端点 Bean 名称

4.2 和 4.3 之间的变化

有关可能影响您的应用程序的重要更改,请参阅迁移指南。您可以在Wiki上找到回到 2.1 的所有版本的迁移指南。

新组件

4.3 版添加了许多新组件。

AMQP 异步出站网关

请参阅异步出站网关

MessageGroupFactory

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

PersistentMessageGroup

我们PersistentMessageGroup为持久实例添加了(延迟加载代理)实现,当它们是(默认值)时MessageGroupStore返回这个实例。有关详细信息,请参阅消息存储getMessageGroup()lazyLoadMessageGroupstrue

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

我们添加了返回每个文件的入站通道适配器InputStream,让您无需将远程文件写入本地文件系统即可检索远程文件。有关详细信息,请参阅FTP 流式入站通道适配器SFTP 流式入站通道适配器

StreamTransformer

我们添加StreamTransformer了将InputStream有效负载转换为 abyte[]或 a String。有关详细信息,请参阅流转换器。

积分图

我们添加IntegrationGraphServerIntegrationGraphControllerREST 服务,以将 Spring Integration 应用程序的运行时模型公开为图形。有关详细信息,请参阅集成图

JDBC 锁注册表

我们添加JdbcLockRegistry了通过数据库表共享的分布式锁。有关详细信息,请参阅JDBC 锁定注册表

LeaderInitiator为了LockRegistry

我们LeaderInitiator根据LockRegistry策略添加了实施。有关更多信息,请参阅领导力事件处理

一般变更

本节介绍 4.3 版为 Spring Integration 带来的一般更改。

核心变化

本节介绍 Spring Integration 核心的一般更改。

链内的出站网关

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

异步服务激活器

我们添加了一个使服务激活器同步的选项。有关详细信息,请参阅异步服务激活器。

消息注释支持更改

消息注释支持不需要@MessageEndpoint(或任何其他@Component)类级别的注释声明。要恢复以前的行为,请将spring.integration.messagingAnnotations.require.componentAnnotationof 设置spring.integration.propertiestrue。有关详细信息,请参阅全局属性注释支持

邮件更改

本节介绍 Spring Integration Mail 功能的一般更改。

可定制的用户标志

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

邮件消息映射

您现在可以将入站邮件消息映射到MessageHeaders包含邮件标头和包含电子邮件内容的有效负载。以前,有效负载始终是原始的MimeMessage. 有关详细信息,请参阅入站邮件消息映射

JMS 更改

本节介绍 Spring Integration JMS 功能的一般更改。

标头映射器

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

异步网关

JMS 出站网关现在有一个async属性。有关详细信息,请参阅异步网关

聚合器更改

当 POJO 聚合器释放对象集合时,行为会发生变化Message<?>。这种情况很少见,但是,如果您的应用程序这样做,您需要对 POJO 进行一些小的更改。请参阅此重要信息:该SimpleMessageGroup.getMessages()方法返回一个unmodifiableCollection. 请注意以获取更多信息。

TCP/UDP 更改

本节介绍 Spring Integration TCP/UDP 功能的一般更改。

活动

TcpConnectionServerListeningEvent启动服务器连接工厂时会发出一个新的。有关详细信息,请参阅TCP 连接事件

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

流反序列化器

在整个消息组装完成之前无法分配最终缓冲区的各种反序列化器现在支持将接收数据的原始缓冲区池化,而不是为每条消息创建和丢弃缓冲区。有关详细信息,请参阅TCP 连接工厂

TCP 消息映射器

消息映射器现在可以选择设置配置的内容类型标头。有关详细信息,请参阅IP 消息标头

文件更改

本节介绍 Spring Integration File 功能的一般更改。

目标目录创建

生成的文件名FileWritingMessageHandler可以代表一个子路径,用于在目标目录中保存文件所需的目录结构。有关详细信息,请参阅生成文件名

现在FileReadingMessageSource隐藏WatchService内部类中的目录扫描逻辑。我们添加了use-watch-servicewatch-events选项来启用此行为。WatchServiceDirectoryScanner由于 API 不一致,我们弃用了顶层。有关WatchServiceDirectoryScanner更多信息,请参阅。

缓冲区大小

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

追加和刷新

您现在可以在追加时避免刷新文件,并使用多种策略在空闲期间刷新数据。有关详细信息,请参阅使用时刷新文件APPEND_NO_FLUSH

保留时间戳

您现在可以配置出站通道适配器以设置目标文件的lastmodified时间戳。有关详细信息,请参阅文件时间戳

拆分器更改

FileSplitter文件被完全读取时,现在会自动关闭 FTP 或 SFTP 会话。这适用于出站网关返回InputStream或您使用新的 FTP 或 SFTP 流通道适配器时。我们还引入了一个新markers-json选项来转换FileSplitter.FileMarker为 JSONString以实现轻松的下游网络交互。有关详细信息,请参阅文件拆分器

文件过滤器

我们添加ChainFileListFilterCompositeFileListFilter. 有关详细信息,请参阅读取文件

AMQP 变更

本节介绍 Spring Integration AMQP 功能的一般更改。

内容类型消息转换器

出站端点现在支持使用 a 进行RabbitTemplate配置,ContentTypeDelegatingMessageConverter以便您可以根据消息内容类型选择转换器。有关详细信息,请参阅出站消息转换

延迟消息处理的标头

Spring AMQP 1.6 增加了对延迟消息交换的支持。标头映射现在支持此功能使用的标头 (amqp_delayamqp_receivedDelay)。

AMQP 支持的通道

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

Redis 变化

本节介绍 Spring Integration Redis 功能的一般更改。

列表推送/弹出方向

以前,队列通道适配器总是以固定方向使用 Redis 列表,向左端推送,从右端读取。您现在可以分别使用 和 的 和 选项配置读取和rightPop写入leftPush方向 。有关详细信息,请参阅Redis 队列入站通道适配器Redis 队列出站通道适配器RedisQueueMessageDrivenEndpointRedisQueueOutboundChannelAdapter

队列入站网关默认序列化程序

入站网关中的默认序列化程序已更改JdkSerializationRedisSerializer为与出站网关兼容。有关详细信息,请参阅Redis 队列入站网关

HTTP 更改

POST以前,对于具有没有标头的正文(例如 )的请求,content-type正文被忽略。在此版本中,此类请求的内容类型被认为符合application/octet-streamRFC 2616 的建议。有关更多信息,请参阅Http Inbound Components

uriVariablesExpression现在SimpleEvaluationContext默认使用 a(从 4.3.15 开始)。有关详细信息,请参阅映射 URI 变量

SFTP 更改

本节介绍 Spring Integration SFTP 功能的一般更改。

工厂豆

我们添加了一个新的工厂 bean 来简化 SFTP 的 Jsch 代理配置。有关详细信息,请参阅代理工厂 Bean

chmod变化

SFTP 出站网关(forputmput命令)和 SFTP 出站通道适配器现在支持chmod在上传后更改远程文件权限的属性。请参阅SFTP Outbound Channel AdapterSFTP Outbound Gateway了解更多信息。

FTP 更改

本节介绍 Spring Integration FTP 功能的一般更改。

会话更改

现在FtpSession支持null和方法list()listNames()因为底层 FTP 客户端可以使用它。有了它,您现在可以配置FtpOutboundGateway不带remoteDirectory表达式的 。您还可以配置<int-ftp:inbound-channel-adapter>不带remote-directoryremote-directory-expression。有关详细信息,请参阅FTP/FTPS 适配器

路由器更改

现在ErrorMessageExceptionTypeRouter支持Exception超类映射以避免在多个继承者的情况下相同通道的重复。为此,ErrorMessageExceptionTypeRouter在初始化期间加载映射类以快速失败ClassNotFoundException

有关详细信息,请参阅路由器

标题映射

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

XMPP 更改

XMPP 通道适配器现在支持 XMPP 扩展 (XEP)。有关详细信息,请参阅XMPP 扩展

WireTap 后期绑定

在第 一次活动拦截器操作期间,WireTap ChannelInterceptor现在可以接受稍后channelName解析为目标的 a。MessageChannel有关详细信息,请参阅接线

ChannelMessageStoreQueryProvider变化

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

WebSocket 更改

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

4.1 和 4.2 之间的变化

有关可能影响您的应用程序的重要更改,请参阅迁移指南。您可以在wiki上找到回到 2.1 的所有版本的迁移指南。

新组件

4.2 版添加了许多新组件。

主要管理/JMX 返工

我们添加了一个新的MetricsFactory策略界面。此更改与 JMX 和管理基础架构中的其他更改一起提供了对管理配置和运行时性能的更多控制。

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

有关完整的详细信息,请参阅Metrics and ManagementJMX Improvements

MongoDB 元数据存储

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

SecuredChannel 注释

我们引入了@SecuredChannel注解,替换了弃用的ChannelSecurityInterceptorFactoryBean. 有关更多信息,请参阅Spring 集成中的安全性

SecurityContext传播

我们介绍了从一个消息流的线程到另一个SecurityContextPropagationChannelInterceptor的传播。SecurityContext有关更多信息,请参阅Spring 集成中的安全性

文件分割器

在 4.1.2 中,我们添加了FileSplitter,它将文本文件分成几行。它现在在int-file:命名空间中得到了全面支持。有关详细信息,请参阅文件拆分器

动物园管理员支持

我们在框架中添加了 Zookeeper 支持,以便在集群或多主机环境中运行时提供帮助。此更改会影响以下功能:

  • ZookeeperMetadataStore

  • ZookeeperLockRegistry

  • 动物园管理员领导

有关更多信息,请参阅Zookeeper 支持

线程屏障

一个新的线程<int:barrier/>组件可用,让一个线程被挂起,直到一些异步事件发生。有关详细信息,请参阅线程屏障

STOMP 支持

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

编解码器

引入了一种新的Codec抽象,用于对对象进行编码和解码byte[]。我们添加了一个使用 Kryo 的实现。我们还添加了基于编解码器的转换器和消息转换器。有关详细信息,请参阅编解码器。

消息 PreparedStatement 设置器

(和) 提供了一个新的MessagePreparedStatementSetter功能接口回调,作为使用上下文填充参数的替代方法。有关详细信息,请参阅出站通道适配器JdbcMessageHandler<int-jdbc:outbound-gateway><int-jdbc:outbound-channel-adapter>SqlParameterSourceFactoryPreparedStatementrequestMessage

一般变更

本节介绍从 4.1 版到 4.2 版的一般更改。

窃听

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

文件更改

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

添加新行

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

忽略隐藏文件

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

编写InputStream有效负载

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

HeadDirectoryScanner

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

最后修改过滤器

我们添加了LastModifiedFileListFilter.

观看服务目录扫描程序

我们添加了WatchServiceDirectoryScanner.

持久文件列表过滤器更改

AbstractPersistentFileListFilter一个新属性 ( flushOnUpdate),当设置为 时,如果它实现了元数据存储(例如, ),则会true调用它。flush()FlushablePropertiesPersistingMetadataStore

课程包更改

我们将ScatterGatherHandler课程从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(). getServerSocketAddress()也可用。

有关详细信息,请参阅“ TCP 连接工厂”。

TCP 网关远程超时

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

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

有关详细信息,请参阅.TCP 出站网关属性

TCP SSLSession 可用于标头映射

TcpConnection实现现在支持getSslSession()让您从会话中提取信息以添加到消息头。有关详细信息,请参阅IP 消息标头

TCP 事件

现在,只要发生相关异常,就会发布新事件——例如向不存在的套接字发送消息。

TcpConnectionEventListeningMessageProducer弃用。请改用通用事件适配器。

有关详细信息,请参阅TCP 连接事件

@InboundChannelAdapter变化

以前,@Poller入站通道适配器上的默认maxMessagesPerPoll属性为-1(infinity)。这与 的 XML 配置不一致<inbound-channel-adapter/>,默认为1. 注释现在将此属性默认为1.

API 更改

o.s.integration.util.FunctionIterator现在需要 ao.s.integration.util.Function而不是 a reactor.function.Function。这样做是为了消除对 Reactor 的不必要的硬依赖。此迭代器的任何使用都需要更改导入。

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

JMS 更改

本节介绍 Spring Integration TCP 功能的一般更改。

回复监听器延迟初始化

您现在可以将 JMS 出站网关中的回复侦听器配置为按需初始化并在空闲期后停止,而不是由网关的生命周期控制。有关详细信息,请参阅出站网关

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

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

有关详细信息,请参阅消息驱动的通道适配器入站网关

默认确认模式

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

有关详细信息,请参阅消息驱动的通道适配器入站网关

共享订阅

我们将共享订阅 (JMS 2.0) 的命名空间支持添加到消息驱动的端点和<int-jms:publish-subscribe-channel>. 以前,您必须将侦听器容器作为<bean/>声明连接起来才能使用共享连接。

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

条件轮询器

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

有关详细信息,请参阅消息源的条件轮询器

AMQP 变更

本节介绍 Spring Integration AMQP 功能的一般更改。

发布者确认

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

相关数据

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

入站网关属性

现在<int-amqp:inbound-gateway>公开该amqp-template属性以允许对外部 bean 进行更多控制以进行回复RabbitTemplate。您还可以提供自己的AmqpTemplate实现。此外,default-reply-to如果请求消息没有replyTo属性,您可以使用。

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

XPath 拆分器改进

( XPathMessageSplitter)<int-xml:xpath-splitter>现在允许output-properties为内部配置javax.xml.transform.Transformer并支持XPath 评估结果的Iterator模式(默认为)。trueorg.w3c.dom.NodeList

有关更多信息,请参阅拆分 XML 消息

HTTP 更改

本节介绍 Spring Integration HTTP 功能的一般更改。

CORS

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

有关更多信息,请参阅跨域资源共享 (CORS) 支持

入站网关超时

您可以配置 HTTP 入站网关方式以在请求超时时返回您指定的状态代码。现在的默认值500 Internal Server Error200 OK.

有关详细信息,请参阅响应状态代码

表格数据

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

网关更改

本节介绍 Spring Integration Gateway 功能的一般更改。

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

使用 Java 8 时,网关方法现在可以返回CompletableFuture<?>. 有关CompletableFuture更多信息,请参阅。

MessagingGateway 注解

请求和回复超时属性现在String不再Long允许使用属性占位符或 SpEL 进行配置。请参阅@MessagingGateway注解

聚合器更改

本节介绍 Spring Integration 聚合器功能的一般更改。

聚合器性能

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

输出消息组处理器

ref为聚合器使用一个或内部 bean 时,您现在可以直接绑定一个MessageGroupProcessor. 此外,我们添加了一个SimpleMessageGroupProcessor返回组中消息的集合。当输出处理器生成 的集合时Message<?>,聚合器会单独发布这些消息。配置SimpleMessageGroupProcessor聚合器 使聚合器成为消息屏障,其中消息被搁置直到它们全部到达,然后单独释放。有关详细信息,请参阅聚合器。

FTP 和 SFTP 更改

本节介绍 Spring Integration FTP 和 SFTP 功能的一般更改。

入站通道适配器

您现在可以remote-directory-expression在入站通道适配器上指定一个,以确定运行时的目录。有关详细信息,请参阅FTP/FTPS 适配器SFTP 适配器

网关部分结果

当您使用 FTP 或 SFTP 出站网关对多个文件(带mgetmput)进行操作时,部分请求完成后可能会出现异常。如果发生这种情况,PartialSuccessException则抛出包含部分结果的 a。有关详细信息,请参阅FTP 出站网关SFTP 出站网关

委托会话工厂

我们添加了一个委托会话工厂,可以根据一些线程上下文值选择特定的会话工厂。

有关详细信息,请参阅委派会话工厂委派会话工厂

默认 Sftp 会话工厂

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

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

消息会话回调

我们MessageSessionCallback<F, T>介绍了Session使用.requestMessage<int-(s)ftp:outbound-gateway/>

有关更多信息,请参阅使用MessageSessionCallbackMessageSessionCallback

Websocket 变化

我们添加WebSocketHandlerDecoratorFactoryServerWebSocketContainer对内部WebSocketHandler. 有关更多信息,请参阅WebSockets 命名空间支持

应用程序事件适配器更改

适配器现在ApplicationEvent可以payload用作event直接允许省略自定义ApplicationEvent扩展。为此,我们引入了publish-payload布尔属性,已在<int-event:outbound-channel-adapter>. 有关更多信息,请参阅SpringApplicationEvent支持

4.0 和 4.1 之间的变化

有关可能影响您的应用程序的重要更改,请参阅迁移指南。您可以在wiki上找到回到 2.1 的所有版本的迁移指南。

新组件

4.1 版添加了许多新组件。

承诺<?> 网关

消息传递网关方法现在支持 ReactorPromise返回类型。请参阅异步网关

WebSocket 支持

WebSocket模块现在可用。它完全基于 Spring WebSocket 和 Spring Messaging 模块,并提供一个<inbound-channel-adapter>和一个<outbound-channel-adapter>. 有关更多信息,请参阅WebSockets 支持

分散-聚集企业集成模式

我们实施了分散-聚集的企业集成模式。有关详细信息,请参阅分散-聚集

路由滑动模式

我们添加了路由滑动 EIP 模式实现。有关详细信息,请参阅路由表。

幂等接收者模式

<idempotent-receiver>我们通过在 XML 中添加组件或 Java 配置的IdempotentReceiverInterceptorIdempotentReceiver注释来添加幂等接收器企业集成模式实现。有关更多信息,请参阅Idempotent Receiver Enterprise Integration PatternJavadoc

恩赐JsonObjectMapper

我们JsonObjectMapper为 JSON 转换器添加了福利。有关详细信息,请参阅变压器

Redis 队列网关

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

PollSkipAdvice

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

一般变更

本节介绍从 4.0 版到 4.1 版的一般更改。

AMQP 入站端点,通道

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

AMQP 出站端点

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

简单消息存储

SimpleMessageStore调用时不再复制组getMessageGroup()。有关详细信息,请参阅[警告]

Web 服务出站网关:encode-uri

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

Http 入站通道适配器和状态码

现在<http:inbound-channel-adapter>可以使用 a 配置status-code-expression来覆盖默认200 OK状态。有关详细信息,请参阅HTTP 命名空间支持

MQTT 适配器更改

您现在可以配置 MQTT 通道适配器以连接到多个服务器——例如,支持高可用性 (HA)。有关更多信息,请参阅MQTT 支持

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

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

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

FTP 和 SFTP 适配器更改

FTP 和 SFTP 出站通道适配器现在支持附加到远程文件并在远程文件已存在时执行特定操作。远程文件模板现在也支持这一点,rmdir()以及exists(). 此外,远程文件模板提供对底层客户端对象的访问,从而可以访问低级 API。

有关详细信息,请参阅FTP/FTPS 适配器SFTP 适配器

拆分器和迭代器

Splitter组件现在支持Iterator作为结果对象来生成输出消息。有关详细信息,请参阅拆分器

聚合器

Aggregator实例现在支持一个新属性expire-groups-upon-timeout。有关详细信息,请参阅聚合器。

内容丰富的改进

我们添加了一个null-result-expression属性,如果返回,它会被评估并<enricher>返回null。您可以将其添加到<header>和中<property>。有关详细信息,请参阅内容丰富器。

我们添加了一个error-channel属性,用于Exceptionrequest-channel. 这使您可以返回一个替代对象以用于扩充。有关详细信息,请参阅内容丰富器。

标头频道注册表

<header-enricher/>元素的子<header-channels-to-string/>元素现在可以覆盖标头通道注册表的默认时间以保留通道映射。有关详细信息,请参阅标头通道注册表

有序关机

我们对有序关机算法进行了改进。有关详细信息,请参阅有序关闭

管理为RecipientListRouter

现在RecipientListRouter提供了几个管理操作来在运行时配置收件人。有了它,您现在可以从一开始就配置<recipient-list-router>没有任何内容<recipient>。有关RecipientListRouterManagement更多信息,请参阅。

AbstractHeaderMapper:NON_STANDARD_HEADERS 令牌

AbstractHeaderMapper实现现在提供了额外的NON_STANDARD_HEADERS令牌来映射任何用户定义的标头,默认情况下未映射。有关详细信息,请参阅AMQP 消息头

AMQP 通道:template-channel-transacted

我们介绍了template-channel-transactedAMQPMessageChannel实例的属性。有关更多信息,请参阅AMQP 支持的消息通道

系统日志适配器

默认的 syslog 消息转换器现在可以选择在有效负载中保留原始消息,同时仍设置标头。有关详细信息,请参阅Syslog 入站通道适配器

异步网关

除了前面提到Promise的返回类型,网关方法现在可以返回一个,在 Spring Framework 4.0 中引入。您还可以在网关中禁用异步处理,让下游流直接返回. 请参阅异步网关ListenableFutureFuture

聚合器建议链

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

出站通道适配器和脚本

现在<int:outbound-channel-adapter/>支持<script/>子元素。底层脚本必须有一个void返回类型或 return null。请参阅Groovy 支持脚本支持

重测序仪更改

当重新排序器中的消息组超时(使用group-timeout或 a MessageGroupStoreReaper)时,默认情况下,迟到的消息现在会立即被丢弃。请参阅重新排序器

可选 POJO 方法参数

Spring Integration 现在始终如一地处理 Java 8 的Optional类型。请参阅配置服务激活器

QueueChannel支持队列类型

QueueChannelbackedQueue type已从更改BlockingQueue为更通用的Queue. 此更改允许使用任何外部Queue实现(例如,Reactor 的PersistentQueue)。请参阅QueueChannel配置

ChannelInterceptor变化

现在ChannelInterceptor支持附加afterSendCompletion()afterReceiveCompletion()方法。请参阅通道拦截器

IMAP 窥视

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

3.0 和 4.0 之间的变化

有关可能影响您的应用程序的重要更改,请参阅迁移指南。您可以在wiki上找到回到 2.1 的所有版本的迁移指南。

新组件

4.0 版添加了许多新组件。

MQTT 通道适配器

MQTT 通道适配器(以前在 Spring Integration Extensions 存储库中可用)现在作为正常 Spring Integration 发行版的一部分提供。请参阅MQTT 支持

@EnableIntegration

我们添加了@EnableIntegration注释以允许在使用@Configuration类时声明标准 Spring Integration bean。有关详细信息,请参阅注释支持

@IntegrationComponentScan

我们添加了@IntegrationComponentScan注释以允许对特定于 Spring Integration 的组件进行类路径扫描。有关详细信息,请参阅注释支持

“@EnableMessageHistory”

您现在可以使用类@EnableMessageHistory中的注释启用消息历史记录@Configuration。此外,JMX MBean 可以修改消息历史设置。此外,可以跟踪带注释的端点(例如、等)的MessageHistory自动创建实例。有关详细信息,请参阅消息历史记录MessageHandler@ServiceActivator@Splitter

@MessagingGateway

您现在可以使用@MessagingGateway注释配置消息传递网关接口。它是<int:gateway/>XML 元素的类似物。有关详细信息,请参阅@MessagingGateway注解

弹簧靴@EnableAutoConfiguration

除了@EnableIntegration前面提到的注解之外,我们还引入了一个钩子来允许使用 Spring Boot 的@EnableAutoConfiguration注解配置 Spring Integration 基础设施 bean。有关详细信息,请参阅Spring Boot 参考指南中的“自动配置”

@GlobalChannelInterceptor

除了@EnableIntegration上面提到的注解,我们还介绍了@GlobalChannelInterceptor注解。有关详细信息,请参阅注释支持

@IntegrationConverter

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

@EnablePublisher

我们添加了@EnablePublisher注解以允许default-publisher-channel@Publisher注解指定 a 。有关详细信息,请参阅注释支持

Redis 通道消息存储

MessageGroupStore我们添加了一个经过优化的 Redis ,以在支持QueueChannel持久性时使用。有关更多信息,请参阅Redis 通道消息存储

我们添加了一个 Redis ChannelPriorityMessageStore。您可以使用它按优先级检索消息。有关更多信息,请参阅Redis 通道消息存储

MongodDB Channel 消息存储

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

@EnableIntegrationMBeanExport

您现在可以IntegrationMBeanExporter使用类中的@EnableIntegrationMBeanExport注释启用@Configuration。有关更多信息,请参阅MBean 导出器

ChannelSecurityInterceptorFactoryBean

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

Redis 命令网关

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

RedisLockRegistryGemfireLockRegistry

RedisLockRegistryGemfireLockRegistry现在可用于支持对多个应用程序实例和服务器可见的全局锁。这些可以与跨多个应用程序实例的聚合消息处理程序一起使用,以便仅在一个实例上发生组释放。有关详细信息,请参阅Redis 锁注册表Gemfire 锁注册表聚合器

@Poller

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

@InboundChannelAdapter对于带SmartLifecycle注释的端点

我们添加了@InboundChannelAdapter方法注释。它是<int:inbound-channel-adapter>XML 组件的类似物。此外,所有消息注释现在都提供SmartLifecycle选项。有关详细信息,请参阅注释支持

Twitter 搜索出站网关

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

Gemfire 元数据存储

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

@BridgeFrom@BridgeTo注释

我们引入了@BridgeFrom方法@BridgeTo @Bean注释来标记类中的MessageChannelbean @Configuration。有关详细信息,请参阅注释支持

元消息注释

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

一般变更

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

需要 Spring 框架 4.0

我们将核心消息传递抽象(Message、、MessageChannel等)移至 Spring Frameworkspring-messaging模块。直接在代码中引用这些类的开发人员需要进行更改,如3.0 到 4.0 迁移指南的第一部分所述。

XPath 标头丰富器的标头类型

我们为 的子元素引入了header-type属性。此属性提供标头值的目标类型(XPath 表达式求值的结果将转换为该目标类型)。有关详细信息,请参阅XPath 标头丰富器。header<int-xml:xpath-header-enricher>

对象到 JSON 转换器:节点结果

我们介绍result-type<int:object-to-json-transformer>. 此属性为将对象映射到 JSON 的结果提供目标类型。它支持STRING(默认)和NODE. 有关更多信息,请参阅自 3.0 版以来,Spring Integration 还提供了一个内置的#xpathSpEL 函数用于表达式。.

JMS 标头映射

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

JMS 出站通道适配器

JMS 出站通道适配器现在支持该session-transacted属性(默认值:false)。以前,您必须注入自定义JmsTemplate的使用事务。请参阅出站通道适配器

JMS 入站通道适配器

JMS 入站通道适配器现在支持该session-transacted属性(默认值:false)。以前,您必须注入自定义JmsTemplate的使用事务。适配器允许在 中“交易” acknowledgeMode,这是不正确的并且不起作用。不再允许此值。请参阅入站通道适配器

数据类型通道

您现在可以指定MessageConverter在将有效负载转换(如有必要)为datatype数据类型通道中接受的实例之一时使用。有关详细信息,请参阅数据类型通道配置

更简单的重试建议配置

我们添加了简化的命名空间支持来配置RequestHandlerRetryAdvice. 有关详细信息,请参阅配置重试建议

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

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

Redis 元数据存储

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

JdbcChannelMessageStorePriorityChannel

T`JdbcChannelMessageStore` 现在实现了PriorityCapableChannelMessageStore,让它用作实例的message-store引用。priority-queue有关更多信息,请参阅支持消息通道

AMQP 端点交付模式

默认情况下,Spring AMQP 在代理上创建持久消息。amqp_deliveryMode您可以通过设置标头或自定义映射器来覆盖此行为。我们为适配器添加了一个方便的default-delivery-mode属性,以便更轻松地配置此重要设置。有关更多信息,请参阅出站通道适配器出站网关

FTP 超时

现在DefaultFtpSessionFactory公开connectTimeoutdefaultTimeoutdataTimeout属性,避免需要子类化工厂来设置这些公共属性。这些postProcess*方法仍可用于更高级的配置。有关详细信息,请参阅FTP 会话工厂

推特:StatusUpdatingMessageHandler

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

JPA 检索网关:id-expression

我们介绍了to perform的id-expression属性。有关更多信息,请参阅检索出站网关<int-jpa:retrieving-outbound-gateway>EntityManager.find(Class entityClass, Object primaryKey)

TCP 反序列化事件

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

@Bean定义上的消息注释

您现在可以在类中的定义上配置消息注释( @ServiceActivator@Router@InboundChannelAdapter和其他) 。有关详细信息,请参阅注释支持@Bean@Configuration

2.2 和 3.0 之间的变化

有关可能影响您的应用程序的重要更改,请参阅迁移指南。您可以在wiki上找到回到 2.1 的所有版本的迁移指南。

新组件

3.0 版添加了许多新组件。

HTTP 请求映射

HTTP 模块现在为入站端点提供强大的请求映射支持。我们用 替换了UriPathHandlerMapping类,它在应用程序上下文中IntegrationRequestMappingHandlerMapping以 bean 名称注册。integrationRequestMappingHandlerMapping在解析 HTTP 入站端点后,要么IntegrationRequestMappingHandlerMapping注册一个新的 bean,要么重用现有的 bean。为了实现灵活的请求映射配置,Spring Integration为和提供了<request-mapping/>子元素。现在,两个 HTTP 入站端点都完全基于 Spring MVC 3.1 引入的请求映射基础设施。例如,单个入站端点支持多个路径。有关详细信息,请参阅HTTP 命名空间支持<http:inbound-channel-adapter/><http:inbound-gateway/>

Spring 表达式语言 (SpEL) 配置

我们添加了一个新功能,IntegrationEvaluationContextFactoryBean以允许配置自定义PropertyAccessor实现和函数,以便在整个框架中的 SpEL 表达式中使用。有关详细信息,请参阅Spring 表达式语言 (SpEL)

SpEL 功能支持

EvaluationContext为了使用静态函数自定义 SpEL Method,我们引入了<spel-function/>组件。我们还添加了两个内置函数:#jsonPath#xpath. 有关详细信息,请参阅SpEL 函数

SpEL PropertyAccessors 支持

EvaluationContext为了使用实现自定义 SpEL PropertyAccessor,我们添加了<spel-property-accessors/>组件。有关详细信息,请参阅属性访问器。

Redis:新组件

我们添加了一个新的基于 Redis 的MetadataStore实现。您可以使用RedisMetadataStore来维护MetadataStore跨应用程序重新启动的状态。这个新的MetadataStore实现可以与适配器一起使用,例如:

  • Twitter 入站适配器

  • Feed 入站通道适配器

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

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

标头频道注册表

您现在可以指示框架将回复通道和错误通道存储在注册表中以供以后解决。replyChannel这对于orerrorChannel可能丢失的情况很有用(例如,在序列化消息时)。有关详细信息,请参阅Header Enricher

MongoDB 支持:新ConfigurableMongoDbMessageStore

除了现有的eMongoDbMessageStore,我们还推出了新的ConfigurableMongoDbMessageStoreMessageStore这为 MongoDB提供了更健壮和灵活的实现。它与现有商店没有向后兼容性,但我们建议将其用于新应用程序。现有应用程序可以使用它,但旧存储中的消息不可用。有关更多信息,请参阅MongoDb 支持

系统日志支持

在 2.2 的基础上SyslogToMapTransformer,Spring Integration 3.0 引入了专门为接收 SYSLOG 消息而定制的入站通道适配器UDPTCP有关详细信息,请参阅系统日志支持

tail支持

我们添加了文件入站通道适配器,tail当将行添加到文本文件的末尾时,它们使用命令生成消息。请参阅“尾随文件”

JMX 支持

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

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

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

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

TcpConnection现在,当打开或关闭连接或发生异常时,实例会发出ApplicationEvent实例(特别是实例)。此更改允许应用程序通过使用正常的 Spring机制TcpConnectionEvent来了解 TCP 连接的更改。ApplicationListener

我们重命名AbstractTcpConnectionTcpConnectionSupport. 作为此类子类的自定义连接可以使用其方法来发布事件。同样,我们重命名AbstractTcpConnectionInterceptorTcpConnectionInterceptorSupport.

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

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

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

有关详细信息,请参阅TCP 连接事件

入站通道适配器脚本支持

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

内容丰富器:标题丰富支持

内容丰富器现在为子元素提供配置<header/>,以根据来自底层消息流的回复消息使用标头丰富出站消息。有关详细信息,请参阅有效负载丰富器。

一般变更

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

消息 ID 生成

以前,消息 ID 是使用 JDKUUID.randomUUID()方法生成的。在此版本中,默认机制已更改为使用更高效且显着更快的算法。此外,我们添加了更改用于生成消息 ID 的策略的功能。有关详细信息,请参阅消息 ID 生成

“<网关>”更改

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

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

现在GatewayMethodMetadata是公开课。它允许您以编程方式配置GatewayProxyFactoryBeanfrom Java。

有关详细信息,请参阅消息传递网关

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

  • Inbound Endpointmerge-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. 现在,除了更正该问题外,DefaultHttpHeaderMapper还为任何接受日期时间值的 HTTP 标头提供格式化字符串的日期解析。

  • 入站端点表达式变量:除了现有的#requestParamsand之外#pathVariables<http:inbound-gateway/>and<http:inbound-channel-adapter/>现在还支持其他有用的变量:#matrixVariables、、、和。这些变量在有效负载和标头表达式中都可用。#requestAttributes#requestHeaders#cookies

  • 出站端点 'uri-variables-expression':HTTP 出站端点现在支持uri-variables-expression属性来指定一个Expression以评估MapURL 模板中所有 URI 变量占位符的 a。这允许基于传出消息选择不同的表达式映射。

有关详细信息,请参阅HTTP 支持

杰克逊支持 (JSON)
  • 引入了 JSON 转换的新抽象。当前提供了 Jackson 1.x 和 Jackson 2 的实现,版本由类路径中的存在确定。以前,仅支持 Jackson 1.x。

  • ObjectToJsonTransformerJsonToObjectTransformer现在发出/使用包含类型信息的标头。

有关更多信息,请参阅Transformer中的“JSON 转换器” 。

链元素id属性

以前, a 中id元素的属性<chain>被忽略,并且在某些情况下是不允许的。现在,ida 中的所有元素都允许使用该属性<chain>。链元素的bean名称是周围链idid元素本身的组合。例如:'myChain$child.myTransformer.handler'。有关更多信息,请参阅消息处理程序链

聚合器 'empty-group-min-timeout' 属性

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

持久文件列表过滤器(文件,(S)FTP)

现在可以使用使用持久化的新FileListFilter实现。MetadataStore您可以使用这些来防止系统重新启动后出现重复文件。有关详细信息,请参阅读取文件FTP 入站通道适配器SFTP 入站通道适配器

脚本支持:变量更改

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

直接通道负载平衡配置

以前,在LoadBalancingStrategy通道的dispatcher子元素上进行配置时,唯一可用的选项是使用预定义的值枚举,这不允许开发人员设置LoadBalancingStrategy. 您现在可以使用load-balancer-ref来提供对LoadBalancingStrategy. 有关详细信息,请参阅DirectChannel

PublishSubscribeChannel 行为

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

FTP、SFTP 和 FTPS 更改

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

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

CachingConnectionFactory现在提供了一个新方法:resetCache(). 此方法立即关闭空闲会话并导致正在使用的会话在它们返回缓存时关闭。

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

FTP、SFTP 和 FTPS 入站适配器

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

在此版本中,一个新属性local-filter允许您覆盖默认过滤器(例如,使用一个AcceptAllFileListFilter或其他一些自定义过滤器)。

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

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

FTP、SFTP 和 FTPS 网关

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

网关现在支持递归lsmget命令,可以检索远程文件树。

网关现在支持putmput命令,可以将文件发送到远程服务器。

local-filename-generator-expression现在支持该属性,在检索期间启用本地文件的命名。默认情况下,使用与远程文件相同的名称。

现在支持该local-directory-expression属性,在检索期间启用本地目录的命名(基于远程目录)。

远程文件模板

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

有关详细信息,请参阅FTP/FTPS 适配器SFTP 适配器

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

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

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

请注意,该requiresReply属性以前存在,但在 中设置为falseAbstractReplyProducingMessageHandler并且无法使用 XML 命名空间在出站网关上对其进行配置。

以前,没有收到回复的网关会默默地结束流程(使用 DEBUG 日志消息)。默认情况下,通过此更改,大多数网关现在都会引发异常。要恢复到以前的行为,请设置requires-replyfalse
AMQP 出站网关标头映射

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

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

存储过程组件改进

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

  • type-name

  • return-type

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

有关详细信息,请参阅存储过程

Web 服务出站 URI 配置

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

Redis 适配器更改

Redis 入站通道适配器现在可以使用属性nullserializer,原始数据是消息负载。

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

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

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

建议过滤器

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

使用注释为端点提供建议

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

ObjectToStringTransformer 改进

这个转换器现在可以正确地转换byte[]char[]有效载荷到String. 有关详细信息,请参阅变压器

JPA 支持更改

要持久化或合并的有效负载现在可以是java.lang.Iterable.

在这种情况下,由 . 返回的每个对象Iterable都被视为一个实体,并通过使用底层EntityManager. 迭代器返回的空值被忽略。

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

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

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

有关更多信息,请参阅JPA 支持

延迟器:延迟表达式

以前,<delayer>提供了一个delay-header-name属性来确定运行时的延迟值。在复杂的情况下,<delayer>必须以 . 开头<header-enricher>。Spring Integration 3.0 引入了用于动态延迟确定的expression属性和子元素。expressiondelay-header-name属性现在已弃用,因为您可以在expression. 此外,我们引入了ignore-expression-failures来控制表达式评估失败时的行为。有关更多信息,请参阅延迟器

JDBC 消息存储改进

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

IMAP 空闲连接异常

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

消息头和 TCP

TCP 连接工厂现在可以配置灵活的机制来通过 TCP 传输选定的标头(以及有效负载)。新TcpMessageMapper的启用标头选择,您需要配置适当的序列化器或反序列化器以将结果写入MapTCP 流。我们添加了一个MapJsonSerializer作为通过 TCP 传输标头和有效负载的便捷机制。有关详细信息,请参阅传输标头

JMS 消息驱动通道适配器

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

RMI 入站网关

RMI 入站网关现在支持error-channel属性。请参阅入站 RMI

XsltPayloadTransformer

您现在可以通过设置transformer-factory-class属性来指定变压器工厂类名称。见XsltPayloadTransformer

2.1 和 2.2 之间的变化

有关可能影响您的应用程序的重要更改,请参阅迁移指南。您可以在wiki上找到回到 2.1 的所有版本的迁移指南。

新组件

2.2 版添加了许多新组件。

RedisStore入站和出站通道适配器

Spring Integration 现在具有入站和出站通道适配器,允许您在 Redis 集合中RedisStore写入和读取有效负载。Message有关详细信息,请参阅RedisStore 出站通道适配器Redis 存储入站通道适配器

MongoDB 入站和出站通道适配器

MessageSpring Integration 现在具有 MongoDB 入站和出站通道适配器,允许您在 MongoDB 文档存储中写入和读取有效负载。有关更多信息,请参阅MongoDB 出站通道适配器MongoDB 入站通道适配器

JPA 端点

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

有关更多信息,请参阅JPA 支持

一般变更

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

Spring 3.1 默认使用

Spring Integration 现在使用 Spring 3.1。

向端点添加行为

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

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

  • MessageHandlerRetryAdvice

  • MessageHandlerCircuitBreakerAdvice

  • ExpressionEvaluatingMessageHandlerAdvice

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

事务同步和伪事务

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

此外,您可以在不存在“真实”交易时启用这些功能,通过PseudoTransactionManager.

有关详细信息,请参阅事务同步

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

使用文件出站通道适配器或文件出站网关时,可以使用新mode属性。在 Spring Integration 2.2 之前,目标文件在存在时会被替换。现在您可以指定以下选项:

  • REPLACE(默认)

  • APPEND

  • FAIL

  • IGNORE

有关详细信息,请参阅处理现有目标文件

向更多出站网关添加回复超时

XML 命名空间支持将回复超时属性添加到以下出站网关:

  • AMQP 出站网关

  • 文件出站网关

  • FTP 出站网关

  • SFTP 出站网关

  • WS 出站网关

Spring-AMQP 1.1

Spring Integration 现在使用 Spring AMQP 1.1。这使得在 Spring Integration 应用程序中可以使用几个特性,包括:

  • 出站网关的固定回复队列

  • HA(镜像)队列

  • 发布者确认

  • 回信

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

JDBC 支持 - 存储过程组件
SpEL 支持

在使用 Spring Integration JDBC Adapter 的存储过程组件时,您现在可以使用 Spring 表达式语言 (SpEL) 提供存储过程名称或存储函数名称。

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

JMX 支持

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

  • 存储过程名称

  • 存储过程名称表达式

  • JdbcCallOperations缓存统计

JDBC 支持:出站网关

当您使用 JDBC 出站网关时,更新查询不再是强制性的。您现在可以通过将请求消息用作参数源来仅提供选择查询。

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

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

有序关机

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

JMS 出站网关改进

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

ObjectToJsonTransformer

默认情况下,ObjectToJsonTransformer现在将content-type标头设置为application/json. 有关详细信息,请参阅变压器

HTTP 支持

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

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

或者,您可能希望考虑改用 JSON。它是通过Jackson在类路径上启用的。

2.0 和 2.1 之间的变化

有关可能影响您的应用程序的重要更改,请参阅迁移指南。

新组件

2.1 版添加了许多新组件。

JSR-223 脚本支持

在 Spring Integration 2.0 中,我们添加了对Groovy的支持。在 Spring Integration 2.1 中,我们通过实现对JSR-223(“Java™ 平台脚本”)的支持,大大扩展了对其他语言的支持。现在您可以使用任何支持 JSR-223 的脚本语言,包括:

  • Javascript

  • Ruby 和 JRuby

  • Python 和 Jython

  • 时髦的

有关更多详细信息,请参阅脚本支持

宝石火支持

Spring Integration通过为条目和连续查询事件提供入站适配器、将条目写入缓存的出站适配器以及实现来提供对GemFire的支持。Spring 集成利用了Spring Gemfire项目,为其组件提供了一个瘦包装器。MessageStoreMessageGroupStore

有关更多详细信息,请参阅Pivotal GemFire 和 Apache Geode 支持

AMQP 支持

Spring Integration 2.1 添加了几个通道适配器,用于使用高级消息队列协议(AMQP) 接收和发送消息。此外,Spring Integration 还提供了点对点消息通道和发布-订阅消息通道,两者均由 AMQP 交换和队列提供支持。

有关详细信息,请参阅AMQP 支持

MongoDB 支持

从 2.1 版开始,Spring Integration通过提供基于 MongoDBMessageStore.

有关更多详细信息,请参阅MongoDb 支持

Redis 支持

从 2.1 版开始,Spring Integration通过提供基于 Redis以及发布-订阅消息传递适配器来支持Redis,这是一种高级键值存储。MessageStore

有关更多详细信息,请参阅Redis 支持

支持 Spring 的资源抽象

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

有关更多详细信息,请参阅资源入站通道适配器

存储过程组件

在 Spring Integration 2.1 中,该JDBC模块还通过添加几个新组件(包括入站和出站通道适配器以及出站网关)来提供存储过程支持。存储过程支持利用 Spring 的SimpleJdbcCall类,因此支持以下存储过程:

  • 阿帕奇德比

  • DB2

  • MySQL

  • 微软 SQL 服务器

  • 甲骨文

  • PostgreSQL

  • 赛贝斯

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

  • MySQL

  • 微软 SQL 服务器

  • 甲骨文

  • PostgreSQL

有关详细信息,请参阅存储过程

XPath 和 XML 验证过滤器

Spring Integration 2.1 提供了一个新的基于 XPath 的消息过滤器。它是XML模块的一部分。XPath 过滤器允许您使用 XPath 表达式过滤消息。我们还添加了 XML 验证过滤器的文档。

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

有效载荷丰富器

从 Spring Integration 2.1 开始,我们添加了有效负载丰富器。有效负载丰富器定义了一个端点,该端点通常将 a 传递Message给公开的请求通道,然后期待回复消息。然后,回复消息成为评估表达式以丰富目标有效负载的根对象。

有关更多详细信息,请参阅有效负载丰富器

FTP 和 SFTP 出站网关

Spring Integration 2.1 提供了两个新的出站网关来与远程文件传输协议 (FTP) 或安全文件传输协议 (SFT) 服务器进行交互。这两个网关让您可以直接执行一组有限的远程命令。

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

有关详细信息,请参阅FTP 出站网关SFTP 出站网关

FTP 会话缓存

从 2.1 版开始,我们在远程文件适配器(例如 FTP、SFTP 等)的会话管理方面提供了更多灵活性。

具体来说,我们弃用了该cache-sessions属性(可通过 XML 命名空间支持获得)。作为替代方案,sessionCacheSize我们sessionWaitTimeoutCachingSessionFactory.

有关详细信息,请参阅FTP 会话缓存SFTP 会话缓存

框架重构

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

标准化路由器配置

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

在 Spring Integration 2.1 中,我们删除了ignore-channel-name-resolution-failures属性,以便将其行为与resolution-required属性合并。此外,该resolution-required属性现在默认为true.

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

但是,如果您确实想静默发送消息,则可以设置default-output-channel="nullChannel".

随着路由器参数的标准化和前面描述的参数的整合,旧的基于 Spring Integration 的应用程序可能会崩溃。

有关详细信息,请参阅Routers

XML 模式更新到 2.1

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

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

以下示例声明了一个无版本的 Spring Integration 命名空间:

<?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 Integration 命名空间:

<?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 Integration 项目使用Git进行版本控制。为了进一步提高社区知名度,该项目已从 SpringSource 托管的 Git 存储库移至Github。Spring Integration Git 存储库位于:spring-integration

对于该项目,我们还改进了提供代码贡献的流程。此外,我们确保每个提交都经过同行评审。事实上,核心提交者现在遵循与贡献者相同的流程。有关更多详细信息,请参阅贡献

使用 Sonar 改进源代码可见性

为了提供更好的源代码可见性并因此监控 Spring Integration 源代码的质量,我们设置了Sonar的一个实例。我们每晚收集指标并在sonar.spring.io上提供。

新样品

对于 Spring Integration 的 2.1 版本,我们还扩展了 Spring Integration Samples 项目并添加了许多新示例,例如涵盖 AMQP 支持的示例,展示新的有效负载丰富器的示例,说明测试 Spring Integration 流片段的技术的示例,以及针对 Oracle 数据库执行存储过程的示例。有关详细信息,请访问spring-integration-samples

版本 1.0 和 2.0 之间的更改

有关可能影响您的应用程序的重要更改,请参阅迁移指南。

Spring 3 支持

Spring Integration 2.0 构建在 Spring 3.0.5 之上,它的许多功能可供我们的用户使用。

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

您现在可以在转换器、路由器、过滤器、拆分器、聚合器、服务激活器、标头丰富器和 Spring Integration 核心命名空间的更多元素以及各种适配器中使用 SpEL 表达式。本指南包含许多示例。

转换服务和转换器

现在,您可以在配置许多 Spring Integration 组件(例如Datatype 通道)时从 Spring 提供的转换服务支持中受益。请参阅消息通道实现服务激活器。此外,上一点提到的 SpEL 支持也依赖于转换服务。因此,您可以注册一次转换器,并在使用 SpEL 表达式的任何地方利用它们。

TaskSchedulerTrigger

Spring 3.0 定义了两个与调度相关的新策略:TaskSchedulerTrigger. Spring Integration(使用大量调度)现在建立在这些之上。事实上,Spring Integration 1.0 最初定义了一些组件(例如CronTrigger),现在已经迁移到 Spring 3.0 的核心 API 中。现在,您可以受益于在整个应用程序上下文中重用相同的组件(不仅仅是 Spring Integration 配置)。我们还通过提供用于直接配置速率、延迟、cron 表达式和触发器引用的属性,大大简化了 Spring Integration 轮询器的配置。有关示例配置,请参阅通道适配器

RestTemplateHttpMessageConverter

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

企业集成模式添加

同样在 2.0 中,我们添加了对 Hohpe 和 Woolf 的Enterprise Integration Patterns书中描述的更多模式的支持。

消息历史

我们现在提供对消息历史模式的支持,让您跟踪所有遍历的组件,包括每个通道和端点的名称以及该遍历的时间戳。有关详细信息,请参阅消息历史记录

消息存储

我们现在提供对消息存储模式的支持。消息存储提供了一种策略,用于代表范围超出单个事务的任何进程(例如聚合器和重排序器)持久化消息。本指南的许多部分都包含了如何使用消息存储的示例,因为它会影响 Spring 集成的多个领域。有关更多详细信息,请参阅消息存储声明检查消息通道聚合器JDBC 支持`"和重新排序器。

索赔检查

我们添加了声明检查模式的实现。声明检查模式背后的想法是,您可以将消息负载交换为“声明票证”。这使您可以在跨通道发送消息时减少带宽并避免潜在的安全问题。有关详细信息,请参阅索赔检查

控制总线

我们提供了控制总线模式的实现,它允许您使用消息传递来管理和监控端点和通道。这些实现包括基于 SpEL 的方法和运行 Groovy 脚本的方法。有关详细信息,请参阅控制总线控制总线

新的通道适配器和网关

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

TCP 和 UDP 适配器

我们添加了通道适配器,用于通过 TCP 和 UDP 互联网协议接收和发送消息。有关详细信息,请参阅TCP 和 UDP 支持。另请参阅以下博客:“在 Spring Integration 2.0 M3 中使用 UDP 和 TCP 适配器”

Twitter 适配器

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

XMPP 适配器

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

FTP 和 FTPS 适配器

现在提供通过 FTP 和 FTPS 的入站和出站文件传输支持。有关详细信息,请参阅FTP/FTPS 适配器。

SFTP 适配器

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

饲料适配器

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

其他补充

Spring Integration 添加了许多其他功能。本节介绍它们。

Groovy 支持

Spring Integration 2.0 添加了 Groovy 支持,让您可以使用 Groovy 脚本语言来提供集成和业务逻辑。有关更多详细信息,请参阅Groovy 支持

地图变形金刚

这些对称转换器将有效载荷对象与Map对象相互转换。有关详细信息,请参阅变压器。

JSON 转换器

这些对称转换器将有效负载对象与 JSON 相互转换。有关详细信息,请参阅变压器。

序列化变压器

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

框架重构

核心 API 进行了一些重大的重构,使其更简单、更可用。尽管我们预计对开发人员的影响应该很小,但您应该通读本文档以了解更改的内容。具体来说,您应该阅读Dynamic RoutersMessaging GatewaysHTTP Outbound ComponentsMessageAggregator。如果您直接依赖某些核心组件(MessageMessageHeadersMessageChannelMessageBuilder等),则需要更新任何导入语句。我们重组了一些包装,以提供扩展领域模型所需的灵活性,同时避免任何循环依赖(避免这种“缠结”是框架的策略)。

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

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

新的 Spring 集成示例

在 Spring Integration 2.0 中,我们将示例与我们的主要发行版分离。请阅读以下博客以获取更多信息:新的 Spring 集成示例。我们还创建了许多新示例,包括每个新适配器的示例。

用于 Spring 集成的 Spring Tool Suite 可视化编辑器

最新版本的 SpringSource Tool Suite 中包含一个用于 Spring Integration 的惊人的新可视化编辑器。如果您还没有使用 STS,您可以在Spring Tool Suite下载它。


1. see XML Configuration