对于最新的稳定版本,请使用 Spring Integration 6.5.1spring-doc.cadn.net.cn

2.2 和 3.0 之间的更改

请参阅迁移指南,了解可能影响应用程序的重要更改。 您可以在 wiki 上找到所有版本返回 2.1 的迁移指南。spring-doc.cadn.net.cn

新组件

3.0 版添加了许多新组件。spring-doc.cadn.net.cn

HTTP 请求映射

HTTP 模块现在为入站端点提供强大的请求映射支持。 我们将UriPathHandlerMapping类与IntegrationRequestMappingHandlerMapping,以integrationRequestMappingHandlerMapping在应用程序上下文中。 解析 HTTP 入站端点时,新的IntegrationRequestMappingHandlerMappingBean 已注册或现有 Bean 被重用。 为了实现灵活的请求映射配置,Spring Integration 提供了<request-mapping/>child 元素的<http:inbound-channel-adapter/><http:inbound-gateway/>. 现在,两个 HTTP 入站端点都完全基于 Spring MVC 3.1 中引入的请求映射基础设施。 例如,单个入站终结点支持多个路径。 有关详细信息,请参阅 HTTP 命名空间支持spring-doc.cadn.net.cn

Spring 表达式语言 (SpEL) 配置

我们添加了一个新的IntegrationEvaluationContextFactoryBean允许配置自定义PropertyAccessor在整个框架的 SpEL 表达式中使用的实现和函数。 有关更多信息,请参阅 Spring 表达式语言 (SpEL)。spring-doc.cadn.net.cn

SpEL 函数支持

自定义 SpELEvaluationContext带静态Method函数,我们引入了<spel-function/>元件。 我们还添加了两个内置函数:#jsonPath#xpath. 有关详细信息,请参阅 SpEL 函数spring-doc.cadn.net.cn

SpEL PropertyAccessors 支持

自定义 SpELEvaluationContextPropertyAccessor实现时,我们添加了<spel-property-accessors/>元件。 有关详细信息,请参阅属性访问器spring-doc.cadn.net.cn

Redis:新组件

我们添加了一个新的基于 Redis 的MetadataStore实现。 您可以使用RedisMetadataStore以保持MetadataStore跨应用程序重启。 这个新的MetadataStore实现可以与适配器一起使用,例如:spring-doc.cadn.net.cn

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

有关详细信息,“请参阅 Redis 支持”。spring-doc.cadn.net.cn

标头通道注册表

现在,您可以指示框架将回复通道和错误通道存储在注册表中,以便以后解决。 这对于以下情况很有用replyChannelerrorChannel可能会丢失(例如,在序列化消息时)。 有关详细信息,请参阅标头扩充器spring-doc.cadn.net.cn

MongoDB 支持:新增ConfigurableMongoDbMessageStore

除了现有的eMongoDbMessageStore,我们引入了一个新的ConfigurableMongoDbMessageStore. 这提供了更健壮和灵活的实现MessageStore对于 MongoDB。 它与现有商店没有向后兼容性,但我们建议将其用于新应用程序。 现有应用程序可以使用它,但旧存储中的消息不可用。 有关更多信息,请参阅 MongoDb 支持spring-doc.cadn.net.cn

系统日志支持

基于 2.2SyslogToMapTransformer,Spring Integration 3.0 引入UDPTCP专为接收 SYSLOG 消息而定制的入站通道适配器。 有关详细信息,请参阅 Syslog 支持spring-doc.cadn.net.cn

tail支持

我们添加了文件入站通道适配器,这些适配器使用tail命令在将行添加到文本文件末尾时生成消息。 参见“尾部”文件spring-doc.cadn.net.cn

JMX 支持

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

IntegrationMBeanExporter现在允许配置自定义ObjectNamingStrategy通过使用naming-strategy属性。spring-doc.cadn.net.cn

有关更多信息,请参阅 JMX 支持spring-doc.cadn.net.cn

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

TcpConnection实例现在发出ApplicationEvent实例(具体来说TcpConnectionEvent实例),当连接打开或关闭或发生异常时。 此更改允许应用程序使用普通的 Spring 通知应用程序对 TCP 连接的更改ApplicationListener机制。spring-doc.cadn.net.cn

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

此外,我们还添加了<int-ip:tcp-connection-event-inbound-channel-adapter/>. 默认情况下,此适配器将所有TcpConnectionEventinstances 到Channel.spring-doc.cadn.net.cn

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

最后,连接工厂还提供了一种名为closeConnection(String connectionId),它允许应用程序使用其 ID 显式关闭连接。spring-doc.cadn.net.cn

有关详细信息,请参阅 TCP 连接事件spring-doc.cadn.net.cn

入站通道适配器脚本支持

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

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

内容扩充器现在提供<header/>子元素,以根据基础消息流中的应答消息,使用标头扩充出站消息。 有关详细信息,请参阅有效负载扩充器spring-doc.cadn.net.cn

一般更改

本节介绍从 2.2 版到 3.0 版的一般更改。spring-doc.cadn.net.cn

消息 ID 生成

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

“<网关>”更改

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

现在,您可以完全自定义网关方法调用映射到消息的方式。spring-doc.cadn.net.cn

GatewayMethodMetadata现在是一个公共课程。 它允许您以编程方式配置GatewayProxyFactoryBean来自爪哇。spring-doc.cadn.net.cn

有关详细信息,请参阅消息传递网关spring-doc.cadn.net.cn

HTTP 端点更改

  • 出站终结点encode-uri:<http:outbound-gateway/><http:outbound-channel-adapter/>现在提供一个encode-uri属性,允许在发送请求之前禁用 URI 对象的编码。spring-doc.cadn.net.cn

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

  • If-Modified-SinceIf-Unmodified-SinceHTTP 标头:以前,If-Modified-SinceIf-Unmodified-SinceHTTP 标头在映射在DefaultHttpHeaderMapper. 现在,除了纠正这个问题之外,DefaultHttpHeaderMapper为任何接受日期时间值的 HTTP 标头提供格式化字符串的日期解析。spring-doc.cadn.net.cn

  • 入站端点表达式变量:除了现有的#requestParams#pathVariables<http:inbound-gateway/><http:inbound-channel-adapter/>现在支持其他有用的变量:#matrixVariables,#requestAttributes,#requestHeaders#cookies. 这些变量在有效负载和标头表达式中都可用。spring-doc.cadn.net.cn

  • 出站端点 'uri-variables-expression':HTTP 出站端点现在支持uri-variables-expression属性来指定Expression要评估Map对于 URL 模板中的所有 URI 变量占位符。 这允许根据传出消息选择不同的表达式映射。spring-doc.cadn.net.cn

有关详细信息,请参阅 HTTP 支持spring-doc.cadn.net.cn

Jackson支持 (JSON)

  • 引入了 JSON 转换的新抽象。 目前提供了 Jackson 1.x 和 Jackson 2 的实现,版本由类路径上的存在情况决定。 以前,仅支持 Jackson 1.x。spring-doc.cadn.net.cn

  • ObjectToJsonTransformerJsonToObjectTransformer现在发出/使用包含类型信息的标头。spring-doc.cadn.net.cn

有关详细信息,请参阅 Transformer 中的“JSON Transformer”。spring-doc.cadn.net.cn

链元素id属性

以前,id属性<chain>被忽视,在某些情况下,甚至被禁止。 现在,id属性允许用于<chain>. 链元素的 bean 名称是周围链的idid元素本身。 例如:“myChain$child.myTransformer.handler”。 有关详细信息,请参阅消息处理程序链spring-doc.cadn.net.cn

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

AbstractCorrelatingMessageHandler提供了一个名为empty-group-min-timeout以允许空组过期比过期的部分组更长的时间表运行。 空组不会从MessageStore直到它们至少在这个毫秒数内没有被修改。 有关详细信息,请参阅使用 XML 配置聚合器spring-doc.cadn.net.cn

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

新增功能FileListFilter使用 persistentMetadataStore现已上市。 您可以使用这些来防止系统重新启动后出现重复文件。 有关更多信息,请参阅读取文件FTP 入站通道适配器SFTP 入站通道适配器spring-doc.cadn.net.cn

脚本支持:变量更改

我们引入了一个新的variables脚本组件的属性。 此外,现在允许内联脚本使用变量绑定。 有关更多信息,请参阅 Groovy 支持脚本支持spring-doc.cadn.net.cn

直接通道负载平衡配置

以前,在配置LoadBalancingStrategy在频道的dispatcherchild 元素,唯一可用的选项是使用预定义的值枚举,这不允许开发人员设置LoadBalancingStrategy. 您现在可以使用load-balancer-ref提供对LoadBalancingStrategy. 有关更多信息,请参阅DirectChannel.spring-doc.cadn.net.cn

PublishSubscribeChannel 行为

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

FTP、SFTP 和 FTPS 更改

默认情况下,FTP、SFTP 和 FTPS 端点不再缓存会话。spring-doc.cadn.net.cn

我们删除了已弃用的cached-sessions属性。 以前,由此属性值控制的嵌入式缓存机制没有提供限制缓存大小的方法,缓存可能会无限增长。 2.1 版推出CachingConnectionFactory,它成为缓存会话的首选(现在是唯一的)方法。spring-doc.cadn.net.cn

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

DefaultSftpSessionFactory(结合CachingSessionFactory) 现在支持通过单个 SSH 连接进行多路复用通道(仅限 SFTP)。spring-doc.cadn.net.cn

FTP、SFTP 和 FTPS 入站适配器

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

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

如果你想要AcceptOnceFileListFilter要在 JVM 执行中进行维护,您现在可以配置一个自定义过滤器来保留状态,也许是在文件系统上。spring-doc.cadn.net.cn

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

FTP、SFTP 和 FTPS 网关

网关现在支持mv命令,启用远程文件的重命名。spring-doc.cadn.net.cn

网关现在支持递归lsmget命令,启用远程文件树的检索。spring-doc.cadn.net.cn

网关现在支持putmput命令,允许将文件发送到远程服务器。spring-doc.cadn.net.cn

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

local-directory-expression现在支持属性,从而在检索期间(基于远程目录)命名本地目录。spring-doc.cadn.net.cn

远程文件模板

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

有关详细信息,请参阅 FTP/FTPS 适配器SFTP 适配器spring-doc.cadn.net.cn

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

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

WebService 出站网关有一个名为ignore-empty-responses. 它用于处理空的String响应,就好像没有收到响应一样。 默认情况下,它是true,但您可以将其设置为false以允许应用程序接收空的String在回复消息有效负载中。 当属性为true,出于requires-reply属性。 默认情况下,requires-reply为 false。

请注意,requiresReply属性以前存在,但设置为falseAbstractReplyProducingMessageHandler,并且无法使用 XML 命名空间在出站网关上配置它。spring-doc.cadn.net.cn

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

AMQP 出站网关标头映射

以前,<int-amqp:outbound-gateway/>在调用消息转换器之前映射标头,转换器可以覆盖标头,例如content-type. 出站适配器在转换后映射标头,这意味着像content-type从出站Message(如果存在)被使用。spring-doc.cadn.net.cn

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

存储过程组件改进

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

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

有关详细信息,请参阅存储过程spring-doc.cadn.net.cn

Web 服务出站 URI 配置

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

Redis 适配器更改

Redis 入站通道适配器现在可以使用nullserializer属性,原始数据是消息有效负载。spring-doc.cadn.net.cn

Redis 出站通道适配器现在具有topic-expression属性来确定Message在运行时。spring-doc.cadn.net.cn

Redis 入站通道适配器,除了现有的topics属性,现在具有topic-patterns属性。spring-doc.cadn.net.cn

有关详细信息,请参阅 Redis 支持spring-doc.cadn.net.cn

Advising Filters

以前,当<filter/>有一个<request-handler-advice-chain/>,则丢弃作全部在通知链的范围内执行(包括discard-channel). 过滤器元件现在有一个名为discard-within-advice(默认值:true) 以允许在通知链完成后执行丢弃作。 请参阅建议过滤器spring-doc.cadn.net.cn

使用注释为端点提供建议

现在可以使用注释配置请求处理程序通知链。 请参阅使用注释通知端点spring-doc.cadn.net.cn

ObjectToStringTransformer 改进

此转换器现在可以正确转换byte[]char[]payloads 到String. 有关详细信息,请参阅 Transformerspring-doc.cadn.net.cn

JPA 支持更改

要持久化或合并的有效负载现在可以是java.lang.Iterable.spring-doc.cadn.net.cn

在这种情况下,每个对象返回的Iterable被视为实体,并使用基础EntityManager. 迭代器返回的 Null 值将被忽略。spring-doc.cadn.net.cn

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

检索网关没有指定要检索的第一条记录的机制,这是一个常见的用例。 检索网关现在支持通过添加first-resultfirst-result-expression属性添加到网关定义中。 有关详细信息,请参阅检索出站网关spring-doc.cadn.net.cn

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

有关更多信息,请参阅 JPA 支持spring-doc.cadn.net.cn

Delayer:延迟表达

以前,<delayer>提供了一个delay-header-name属性来确定运行时的延迟值。 在复杂情况下,<delayer>前面必须加上<header-enricher>. Spring Integration 3.0 引入了expression属性和expression用于动态延迟确定的子元素。 这delay-header-name属性现在已弃用,因为您可以在expression. 此外,我们还引入了ignore-expression-failures以控制表达式求值失败时的行为。 有关详细信息,请参阅 Delayerspring-doc.cadn.net.cn

JDBC 消息存储改进

Spring Integration 3.0 为 MySQL 版本 5.6.4 及更高版本添加了一组新的 DDL 脚本。 现在 MySQL 支持小数秒,从而改进了从基于 MySQL 的消息存储轮询时的 FIFO 排序。 有关详细信息,请参阅通用 JDBC 消息存储spring-doc.cadn.net.cn

IMAP 空闲连接异常

以前,如果 IMAP 空闲连接失败,则会记录它,但没有通知应用程序的机制。 此类异常现在会生成ApplicationEvent实例。 应用程序可以使用<int-event:inbound-channel-adapter>或任何ApplicationListener配置为接收ImapIdleExceptionEvent(或其超类之一)。spring-doc.cadn.net.cn

消息头和 TCP

TCP 连接工厂现在支持配置灵活的机制,以通过 TCP 传输选定的标头(以及有效负载)。 一个新的TcpMessageMapper启用标头的选择,并且您需要配置适当的序列化程序或反序列化程序来写入生成的Map到 TCP 流。 我们添加了一个MapJsonSerializer作为通过 TCP 传输标头和有效负载的便捷机制。 有关详细信息,请参阅传输标头spring-doc.cadn.net.cn

JMS 消息驱动通道适配器

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

XsltPayloadTransformer

现在,您可以通过设置transformer-factory-class属性。 看XsltPayloadTransformer.spring-doc.cadn.net.cn