此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Integration 6.3.1Spring中文文档

此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Integration 6.3.1Spring中文文档

请参阅迁移指南,了解可能影响应用程序的重要更改。 您可以在 wiki 上找到所有版本的迁移指南,这些版本可以追溯到 2.1Spring中文文档

新组件

版本 3.0 添加了许多新组件。Spring中文文档

HTTP 请求映射

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

Spring Expression Language (SpEL) 配置

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

SpEL 函数支持

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

SpEL PropertyAccessors 支持

为了使用实现自定义 SpEL,我们添加了该组件。 有关更多信息,请参见属性访问器EvaluationContextPropertyAccessor<spel-property-accessors/>Spring中文文档

Redis:新组件

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

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

有关更多信息,请参阅 Redis 支持“。Spring中文文档

标头通道注册表

现在,您可以指示框架将回复通道和错误通道存储在注册表中,以便以后解决。 这对于可能丢失 or 的情况(例如,序列化消息时)非常有用。 有关详细信息,请参阅标头 EnricherreplyChannelerrorChannelSpring中文文档

MongoDB 支持:新ConfigurableMongoDbMessageStore

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

Syslog 支持

在 2.2 的基础上,Spring Integration 3.0 引入了专为接收 SYSLOG 消息而定制的入站通道适配器。 有关详细信息,请参阅 Syslog 支持SyslogToMapTransformerUDPTCPSpring中文文档

tail支持

我们添加了文件入站通道适配器,当将行添加到文本文件末尾时,这些适配器使用命令生成消息。 请参阅“尾部文件”tailSpring中文文档

JMX 支持

我们添加了 . 此适配器查询 JMX MBean 树,并发送一条消息,其中包含一个有效负载,该负载是与查询匹配的对象的图形。 默认情况下,MBean 映射到基元和简单对象(如 、 和数组)。 例如,它允许简单地转换为 JSON。<int-jmx:tree-polling-channel-adapter/>MapListSpring中文文档

现在允许使用属性配置自定义项。IntegrationMBeanExporterObjectNamingStrategynaming-strategySpring中文文档

有关更多信息,请参阅 JMX 支持Spring中文文档

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

TcpConnection现在,当连接打开或关闭或发生异常时,实例会发出实例(特别是实例)。 此更改允许应用程序使用正常的 Spring 机制通知 TCP 连接的更改。ApplicationEventTcpConnectionEventApplicationListenerSpring中文文档

我们重命名为 。 作为此类子类的自定义连接可以使用其方法发布事件。 同样,我们重命名为 。AbstractTcpConnectionTcpConnectionSupportAbstractTcpConnectionInterceptorTcpConnectionInterceptorSupportSpring中文文档

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

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

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

有关详细信息,请参阅 TCP 连接事件Spring中文文档

入站通道适配器脚本支持

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

内容扩充器:标头扩充支持

内容丰富器现在提供子元素的配置,以根据基础消息流中的回复消息使用标头扩充出站消息。 有关详细信息,请参阅 Payload Enricher<header/>Spring中文文档

一般更改

本节介绍从版本 2.2 到版本 3.0 的一般更改。Spring中文文档

消息 ID 生成

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

“<gateway>”更改

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

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

现在是公共类。 它允许您以编程方式配置 from Java。GatewayMethodMetadataGatewayProxyFactoryBeanSpring中文文档

有关详细信息,请参阅邮件网关Spring中文文档

HTTP 终结点更改

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

  • 入站终端节点 merge-with-default-converters:现在有一个属性,用于在自定义消息转换器之后包含默认实例列表。<http:inbound-gateway/><http:inbound-channel-adapter/>merge-with-default-convertersHttpMessageConverterSpring中文文档

  • If-Modified-SinceIf-Unmodified-Since HTTP 标头:以前,在 . 现在,除了纠正该问题外,还为任何接受日期时间值的 HTTP 标头提供从格式化字符串的日期解析。If-Modified-SinceIf-Unmodified-SinceDefaultHttpHeaderMapperDefaultHttpHeaderMapperSpring中文文档

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

  • 出站终结点“uri-variables-expression”:HTTP 出站终结点现在支持为 URL 模板中的所有 URI 变量占位符指定 an 以评估 a 的属性。 这允许根据传出消息选择不同的表达式映射。uri-variables-expressionExpressionMapSpring中文文档

有关详细信息,请参阅 HTTP 支持Spring中文文档

Jackson 支持 (JSON)

  • 引入了 JSON 转换的新抽象。 目前提供了 Jackson 1.x 和 Jackson 2 的实现,版本由类路径上的存在决定。 以前,仅支持 Jackson 1.x。Spring中文文档

  • 和 现在发出/使用包含类型信息的标头。ObjectToJsonTransformerJsonToObjectTransformerSpring中文文档

有关详细信息,请参阅 Transformer 中的“JSON Transformers”。Spring中文文档

Chain Elements 属性id

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

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

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

持久性文件列表筛选器(文件,(S)FTP)

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

脚本支持:变量更改

我们为脚本组件引入了一个新属性。 此外,现在允许内联脚本使用变量绑定。 有关详细信息,请参阅 Groovy 支持脚本支持variablesSpring中文文档

直接通道负载平衡配置

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

PublishSubscribeChannel 行为

以前,发送到没有订阅者的 <publish-subscribe-channel/> 将返回结果。 如果与 结合使用,则会导致引发异常。 现在,有一个名为 (default: ) 的属性。 如果消息至少发送给最小数量的订阅者,则发送操作被视为成功(即使数量为零)。 如果应用程序希望在这些条件下获得异常,请将最小订阅者设置为至少 1。falseMessagingTemplatePublishSubscribeChannelminSubscribers0Spring中文文档

FTP、SFTP 和 FTPS 更改

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

我们从所有终结点中删除了已弃用的属性。 以前,由此属性的值控制的嵌入式缓存机制没有提供限制缓存大小的方法,缓存大小可能会无限增长。 2.1 版引入了 ,它成为缓存会话的首选(现在是唯一)方式。cached-sessionsCachingConnectionFactorySpring中文文档

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

(与 结合使用 )现在支持通过单个 SSH 连接(仅限 SFTP)进行多路复用通道。DefaultSftpSessionFactoryCachingSessionFactorySpring中文文档

FTP、SFTP 和 FTPS 入站适配器

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

在此版本中,新属性允许您覆盖默认筛选器(例如,使用某个或其他一些自定义筛选器)。local-filterAcceptAllFileListFilterSpring中文文档

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

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

FTP、SFTP 和 FTPS 网关

网关现在支持该命令,从而启用远程文件的重命名。mvSpring中文文档

网关现在支持递归和命令,从而支持远程文件树的检索。lsmgetSpring中文文档

网关现在支持和命令,允许将文件发送到远程服务器。putmputSpring中文文档

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

现在支持该属性,允许在检索期间命名本地目录(基于远程目录)。local-directory-expressionSpring中文文档

远程文件模板

在 FTP 和 SFTP 模块使用的实现上提供了新的高级抽象 ()。 虽然它由终结点在内部使用,但你也可以以编程方式使用此抽象。 与所有 Spring 实现一样,它可靠地关闭底层会话,同时允许对会话进行低级别访问。RemoteFileTemplateSession*TemplateSpring中文文档

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

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

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

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

请注意,该属性以前存在,但在 中设置为 ,并且无法使用 XML 命名空间在出站网关上配置它。requiresReplyfalseAbstractReplyProducingMessageHandlerSpring中文文档

以前,未收到回复的网关将以静默方式结束流(带有 DEBUG 日志消息)。 默认情况下,通过此更改,大多数网关现在都会引发异常。 若要恢复到上一个行为,请设置为 。requires-replyfalse

AMQP 出站网关标头映射

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

从此版本开始,网关现在在消息转换后映射标头,与适配器一致。 如果应用程序依赖于以前的行为(转换器的标头覆盖映射的标头),则需要筛选这些标头(在消息到达网关之前)或适当地设置它们。 受 are 和 影响的标头是 和 。 自定义消息转换器可以设置其他标头。SimpleMessageConvertercontent-typecontent-encodingSpring中文文档

存储过程组件改进

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

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

有关详细信息,请参阅存储过程Spring中文文档

Web 服务出站 URI 配置

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

Redis 适配器更改

Redis 入站通道适配器现在可以对属性使用值,原始数据是消息有效负载。nullserializerSpring中文文档

Redis 出站通道适配器现在具有用于确定 at 运行时的 Redis 主题的属性。topic-expressionMessageSpring中文文档

除了现有属性外,Redis 入站通道适配器现在还具有该属性。topicstopic-patternsSpring中文文档

有关更多信息,请参阅 Redis 支持Spring中文文档

建议过滤器

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

使用注释为端点提供建议

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

ObjectToStringTransformer 改进

此转换器现在可以正确地将 转换为 并有效负载到 。 有关详细信息,请参阅 Transformerbyte[]char[]StringSpring中文文档

JPA 支持更改

要保留或合并的有效负载现在可以是 类型。java.lang.IterableSpring中文文档

在这种情况下,将 返回的每个对象视为一个实体,并使用基础 来保留或合并 。 迭代器返回的 Null 值将被忽略。IterableEntityManagerSpring中文文档

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

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

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

有关更多信息,请参阅 JPA 支持Spring中文文档

去程序:延迟表达式

以前,提供了一个属性来确定运行时的延迟值。 在复杂情况下,必须以 . Spring Integration 3.0 引入了用于动态延迟确定的属性和子元素。 该属性现已弃用,因为您可以在 中指定标头计算。 此外,我们还引入了在表达式计算失败时控制行为的方法。 有关更多信息,请参阅 Delayer<delayer>delay-header-name<delayer><header-enricher>expressionexpressiondelay-header-nameexpressionignore-expression-failuresSpring中文文档

JDBC 消息存储库改进

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

IMAP 空闲连接异常

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

邮件头和 TCP

TCP 连接工厂现在允许配置灵活的机制,以通过 TCP 传输选定的标头(以及有效负载)。 新的启用标头的选择,您需要配置适当的序列化程序或反序列化程序,以将结果写入 TCP 流。 我们添加了一个方便的机制,用于通过 TCP 传输标头和有效负载。 有关详细信息,请参阅传输标头TcpMessageMapperMapMapJsonSerializerSpring中文文档

JMS 消息驱动通道适配器

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

XsltPayloadTransformer

现在,您可以通过设置属性来指定变压器工厂类名称。 看。transformer-factory-classXsltPayloadTransformerSpring中文文档

WebService 出站网关具有一个名为 的附加属性。 它用于将空响应视为未收到任何响应。 默认情况下,它是 ,但您可以将其设置为允许应用程序在回复消息有效负载中接收空。 当属性为 时,空字符串将被视为无响应,以达到该属性的目的。 默认情况下,对于 WebService 出站网关为 false。ignore-empty-responsesStringtruefalseStringtruerequires-replyrequires-reply
以前,未收到回复的网关将以静默方式结束流(带有 DEBUG 日志消息)。 默认情况下,通过此更改,大多数网关现在都会引发异常。 若要恢复到上一个行为,请设置为 。requires-replyfalse