此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Integration 6.3.1! |
此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Integration 6.3.1! |
新组件
版本 3.0 添加了许多新组件。
HTTP 请求映射
HTTP 模块现在为入站端点提供强大的请求映射支持。
我们用 替换了类,该类在应用程序上下文中以 的 bean 名称注册。
在解析 HTTP 入站端点时,将注册新 Bean 或重用现有 Bean。
为了实现灵活的请求映射配置,Spring Integration 提供了 和 的子元素。
这两个 HTTP 入站端点现在都完全基于 Spring MVC 3.1 中引入的请求映射基础结构。
例如,单个入站终结点支持多个路径。
有关详细信息,请参阅 HTTP 命名空间支持。UriPathHandlerMapping
IntegrationRequestMappingHandlerMapping
integrationRequestMappingHandlerMapping
IntegrationRequestMappingHandlerMapping
<request-mapping/>
<http:inbound-channel-adapter/>
<http:inbound-gateway/>
Spring Expression Language (SpEL) 配置
我们添加了一个新功能,允许配置自定义实现和函数,以便在整个框架的 SpEL 表达式中使用。
有关详细信息,请参阅 Spring Expression Language (SpEL)。IntegrationEvaluationContextFactoryBean
PropertyAccessor
SpEL 函数支持
为了使用静态函数自定义 SpEL,我们引入了该组件。
我们还添加了两个内置函数:和 。
有关详细信息,请参阅 SpEL 函数。EvaluationContext
Method
<spel-function/>
#jsonPath
#xpath
SpEL PropertyAccessors 支持
为了使用实现自定义 SpEL,我们添加了该组件。
有关更多信息,请参见属性访问器。EvaluationContext
PropertyAccessor
<spel-property-accessors/>
Redis:新组件
我们添加了一个新的基于 Redis 的 MetadataStore
实现。
可以使用 来维护跨应用程序重新启动的状态。
此新实现可与适配器一起使用,例如:RedisMetadataStore
MetadataStore
MetadataStore
-
Twitter 入站适配器
-
馈送入站通道适配器
我们添加了新的基于队列的组件。
我们添加了 和 组件,以分别在 Redis 列表上执行“右键弹出”和“左键”操作。<int-redis:queue-inbound-channel-adapter/>
<int-redis:queue-outbound-channel-adapter/>
有关更多信息,请参阅 Redis 支持“。
标头通道注册表
现在,您可以指示框架将回复通道和错误通道存储在注册表中,以便以后解决。
这对于可能丢失 or 的情况(例如,序列化消息时)非常有用。
有关详细信息,请参阅标头 Enricher。replyChannel
errorChannel
MongoDB 支持:新ConfigurableMongoDbMessageStore
除了现有的,我们还推出了新的.
这为 MongoDB 提供了更健壮、更灵活的实现。
它与现有存储没有向后兼容性,但我们建议将其用于新应用程序。
现有应用程序可以使用它,但旧存储中的消息不可用。
有关详细信息,请参阅 MongoDb 支持。eMongoDbMessageStore
ConfigurableMongoDbMessageStore
MessageStore
Syslog 支持
在 2.2 的基础上,Spring Integration 3.0 引入了专为接收 SYSLOG 消息而定制的入站通道适配器。
有关详细信息,请参阅 Syslog 支持。SyslogToMapTransformer
UDP
TCP
tail
支持
我们添加了文件入站通道适配器,当将行添加到文本文件末尾时,这些适配器使用命令生成消息。
请参阅“尾部文件”。tail
JMX 支持
我们添加了 .
此适配器查询 JMX MBean 树,并发送一条消息,其中包含一个有效负载,该负载是与查询匹配的对象的图形。
默认情况下,MBean 映射到基元和简单对象(如 、 和数组)。
例如,它允许简单地转换为 JSON。<int-jmx:tree-polling-channel-adapter/>
Map
List
现在允许使用属性配置自定义项。IntegrationMBeanExporter
ObjectNamingStrategy
naming-strategy
有关更多信息,请参阅 JMX 支持。
TCP/IP 连接事件和连接管理
TcpConnection
现在,当连接打开或关闭或发生异常时,实例会发出实例(特别是实例)。
此更改允许应用程序使用正常的 Spring 机制通知 TCP 连接的更改。ApplicationEvent
TcpConnectionEvent
ApplicationListener
我们重命名为 。
作为此类子类的自定义连接可以使用其方法发布事件。
同样,我们重命名为 。AbstractTcpConnection
TcpConnectionSupport
AbstractTcpConnectionInterceptor
TcpConnectionInterceptorSupport
此外,我们还添加了 .
默认情况下,此适配器将所有实例发送到 .<int-ip:tcp-connection-event-inbound-channel-adapter/>
TcpConnectionEvent
Channel
此外,TCP 连接工厂现在提供了一个名为 的新方法,该方法返回所有打开连接的标识符列表。
它允许应用程序广播到所有打开的连接,以及其他用途。getOpenConnectionIds()
最后,连接工厂还提供了一个名为 的新方法,该方法允许应用程序使用其 ID 显式关闭连接。closeConnection(String connectionId)
有关详细信息,请参阅 TCP 连接事件。
入站通道适配器脚本支持
现在支持使用 和 子元素来创建 .
请参阅通道适配器表达式和脚本。<int:inbound-channel-adapter/>
<expression/>
<script/>
MessageSource
内容扩充器:标头扩充支持
内容丰富器现在提供子元素的配置,以根据基础消息流中的回复消息使用标头扩充出站消息。
有关详细信息,请参阅 Payload Enricher。<header/>
一般更改
本节介绍从版本 2.2 到版本 3.0 的一般更改。
消息 ID 生成
以前,消息 ID 是使用 JDK 方法生成的。
在此版本中,默认机制已更改为使用更高效、更快的算法。
此外,我们还添加了更改用于生成消息 ID 的策略的功能。
有关详细信息,请参阅消息 ID 生成。UUID.randomUUID()
“<gateway>”更改
现在,您可以在所有网关方法之间设置通用标头,并且我们添加了更多选项,用于向消息添加有关调用了哪个方法的信息。
现在,您可以完全自定义网关方法调用映射到消息的方式。
现在是公共类。
它允许您以编程方式配置 from Java。GatewayMethodMetadata
GatewayProxyFactoryBean
有关详细信息,请参阅邮件网关。
HTTP 终结点更改
-
出站终端节点
encode-uri
:,现在提供一个属性,允许在发送请求之前禁用 URI 对象的编码。<http:outbound-gateway/>
<http:outbound-channel-adapter/>
encode-uri
-
入站终端节点
merge-with-default-converters
:现在有一个属性,用于在自定义消息转换器之后包含默认实例列表。<http:inbound-gateway/>
<http:inbound-channel-adapter/>
merge-with-default-converters
HttpMessageConverter
-
If-Modified-Since
和If-Unmodified-Since
HTTP 标头:以前,在 . 现在,除了纠正该问题外,还为任何接受日期时间值的 HTTP 标头提供从格式化字符串的日期解析。If-Modified-Since
If-Unmodified-Since
DefaultHttpHeaderMapper
DefaultHttpHeaderMapper
-
入站终结点表达式变量:除了现有的 和 之外,and 现在还支持其他有用的变量:、 、 和 。 这些变量在有效负载和标头表达式中都可用。
#requestParams
#pathVariables
<http:inbound-gateway/>
<http:inbound-channel-adapter/>
#matrixVariables
#requestAttributes
#requestHeaders
#cookies
-
出站终结点“uri-variables-expression”:HTTP 出站终结点现在支持为 URL 模板中的所有 URI 变量占位符指定 an 以评估 a 的属性。 这允许根据传出消息选择不同的表达式映射。
uri-variables-expression
Expression
Map
有关详细信息,请参阅 HTTP 支持。
Jackson 支持 (JSON)
-
引入了 JSON 转换的新抽象。 目前提供了 Jackson 1.x 和 Jackson 2 的实现,版本由类路径上的存在决定。 以前,仅支持 Jackson 1.x。
-
和 现在发出/使用包含类型信息的标头。
ObjectToJsonTransformer
JsonToObjectTransformer
有关详细信息,请参阅 Transformer 中的“JSON Transformers”。
Chain Elements 属性id
以前,a 中元素的属性被忽略,在某些情况下,不允许。
现在,允许 .
链元素的 Bean 名称是周围链和元素本身的组合。
例如:'myChain$child.myTransformer.handler'。
有关更多信息,请参阅消息处理程序链。id
<chain>
id
<chain>
id
id
聚合器“empty-group-min-timeout”属性
它提供了一个新属性,该属性名为允许空组过期的运行时间比过期的部分组更长。
空组不会从中删除,直到它们至少在此毫秒数内未被修改。
有关更多信息,请参阅使用 XML 配置聚合器。AbstractCorrelatingMessageHandler
empty-group-min-timeout
MessageStore
持久性文件列表筛选器(文件,(S)FTP)
现在可以使用使用持久性的新实现。
您可以使用这些来防止在系统重新启动后出现重复文件。
有关详细信息,请参阅读取文件、FTP 入站通道适配器和 SFTP 入站通道适配器。FileListFilter
MetadataStore
直接通道负载平衡配置
以前,在通道的子元素上进行配置时,唯一可用的选项是使用预定义的值枚举,这不允许开发人员设置 .
现在,您可以使用 来提供对 的自定义实现的引用。
有关详细信息,请参阅 DirectChannel
。LoadBalancingStrategy
dispatcher
LoadBalancingStrategy
load-balancer-ref
LoadBalancingStrategy
PublishSubscribeChannel 行为
以前,发送到没有订阅者的 <publish-subscribe-channel/> 将返回结果。
如果与 结合使用,则会导致引发异常。
现在,有一个名为 (default: ) 的属性。
如果消息至少发送给最小数量的订阅者,则发送操作被视为成功(即使数量为零)。
如果应用程序希望在这些条件下获得异常,请将最小订阅者设置为至少 1。false
MessagingTemplate
PublishSubscribeChannel
minSubscribers
0
FTP、SFTP 和 FTPS 更改
默认情况下,FTP、SFTP 和 FTPS 端点不再缓存会话。
我们从所有终结点中删除了已弃用的属性。
以前,由此属性的值控制的嵌入式缓存机制没有提供限制缓存大小的方法,缓存大小可能会无限增长。
2.1 版引入了 ,它成为缓存会话的首选(现在是唯一)方式。cached-sessions
CachingConnectionFactory
CachingConnectionFactory
现在提供了一种新方法:.
此方法会立即关闭空闲会话,并导致正在使用的会话在返回到缓存时关闭。resetCache()
(与 结合使用 )现在支持通过单个 SSH 连接(仅限 SFTP)进行多路复用通道。DefaultSftpSessionFactory
CachingSessionFactory
FTP、SFTP 和 FTPS 入站适配器
以前,无法覆盖用于处理从远程服务器检索到的文件的默认筛选器。
该属性确定检索哪些文件,但 .
这意味着,如果检索到的文件的新副本与以前复制的文件同名,则不会从适配器发送任何消息。filter
FileReadingMessageSource
AcceptOnceFileListFilter
在此版本中,新属性允许您覆盖默认筛选器(例如,使用某个或其他一些自定义筛选器)。local-filter
AcceptAllFileListFilter
如果您希望在 JVM 执行之间维护 JVM 的行为,您现在可以配置一个保留状态的自定义过滤器,可能在文件系统上。AcceptOnceFileListFilter
入站通道适配器现在支持该属性,该属性将本地文件修改的时间戳设置为服务器的时间戳(默认值:)。preserve-timestamp
false
FTP、SFTP 和 FTPS 网关
网关现在支持该命令,从而启用远程文件的重命名。mv
网关现在支持递归和命令,从而支持远程文件树的检索。ls
mget
网关现在支持和命令,允许将文件发送到远程服务器。put
mput
现在支持该属性,允许在检索期间命名本地文件。
默认情况下,使用与远程文件相同的名称。local-filename-generator-expression
现在支持该属性,允许在检索期间命名本地目录(基于远程目录)。local-directory-expression
远程文件模板
在 FTP 和 SFTP 模块使用的实现上提供了新的高级抽象 ()。
虽然它由终结点在内部使用,但你也可以以编程方式使用此抽象。
与所有 Spring 实现一样,它可靠地关闭底层会话,同时允许对会话进行低级别访问。RemoteFileTemplate
Session
*Template
有关详细信息,请参阅 FTP/FTPS 适配器和 SFTP 适配器。
出站网关的“requires-reply”属性
所有出站网关(如 或)都是为“请求-答复”方案而设计的。
应从外部服务获得响应,并将其发布到 或 消息标头。
但是,在某些情况下,外部系统可能并不总是返回结果(例如,
a 当 SELECT 以空或单向 Web 服务结尾时)。
因此,开发人员需要一个选项来配置是否需要回复。
为此,我们引入了出站网关组件的属性。
在大多数情况下,默认值为 。
如果没有结果,则抛出 a。
将该值更改为意味着,如果外部服务未返回任何内容,则消息流将在该点结束,类似于出站通道适配器。<jdbc:outbound-gateway/>
<jms:outbound-gateway/>
reply-channel
replyChannel
<jdbc:outbound-gateway/>
ResultSet
requires-reply
requires-reply
true
ReplyRequiredException
false
WebService 出站网关具有一个名为 的附加属性。
它用于将空响应视为未收到任何响应。
默认情况下,它是 ,但您可以将其设置为允许应用程序在回复消息有效负载中接收空。
当属性为 时,空字符串将被视为无响应,以达到该属性的目的。
默认情况下,对于 WebService 出站网关为 false。ignore-empty-responses String true false String true requires-reply requires-reply |
请注意,该属性以前存在,但在 中设置为 ,并且无法使用 XML 命名空间在出站网关上配置它。requiresReply
false
AbstractReplyProducingMessageHandler
以前,未收到回复的网关将以静默方式结束流(带有 DEBUG 日志消息)。
默认情况下,通过此更改,大多数网关现在都会引发异常。
若要恢复到上一个行为,请设置为 。requires-reply false |
AMQP 出站网关标头映射
以前,<int-amqp:outbound-gateway/> 在调用消息转换器之前映射标头,并且转换器可以覆盖诸如 .
出站适配器在转换后映射标头,这意味着使用出站(如果存在)等标头。content-type
content-type
Message
从此版本开始,网关现在在消息转换后映射标头,与适配器一致。
如果应用程序依赖于以前的行为(转换器的标头覆盖映射的标头),则需要筛选这些标头(在消息到达网关之前)或适当地设置它们。
受 are 和 影响的标头是 和 。
自定义消息转换器可以设置其他标头。SimpleMessageConverter
content-type
content-encoding
存储过程组件改进
对于标准方法不支持的更复杂的特定于数据库的类型,我们向具有 OUT-direction 的元素引入了两个新的附加属性:CallableStatement.getObject
<sql-parameter-definition/>
-
type-name
-
return-type
存储过程入站通道适配器子元素的属性现在支持对 Bean 定义的引用。
以前,它只包含一个类名(仍然受支持)。row-mapper
<returning-resultset/>
RowMapper
有关详细信息,请参阅存储过程。
Web 服务出站 URI 配置
Web 服务出站网关“uri”属性现在支持替换 Spring Web 服务支持的所有 URI 方案。
有关详细信息,请参阅出站 URI 配置。<uri-variable/>
Redis 适配器更改
Redis 入站通道适配器现在可以对属性使用值,原始数据是消息有效负载。null
serializer
Redis 出站通道适配器现在具有用于确定 at 运行时的 Redis 主题的属性。topic-expression
Message
除了现有属性外,Redis 入站通道适配器现在还具有该属性。topics
topic-patterns
有关更多信息,请参阅 Redis 支持。
建议过滤器
以前,当 a 具有 时,丢弃操作都是在建议链的范围内执行的(包括 上的任何下游流)。
filter 元素现在具有一个名为 (default: ) 的属性,以允许在建议链完成后执行丢弃操作。
请参阅建议过滤器。<filter/>
<request-handler-advice-chain/>
discard-channel
discard-within-advice
true
使用注释为端点提供建议
现在可以使用注释配置请求处理程序建议链。 请参阅使用注释为端点提供建议。
ObjectToStringTransformer 改进
此转换器现在可以正确地将 转换为 并有效负载到 。
有关详细信息,请参阅 Transformer。byte[]
char[]
String
JPA 支持更改
要保留或合并的有效负载现在可以是 类型。java.lang.Iterable
在这种情况下,将 返回的每个对象视为一个实体,并使用基础 来保留或合并 。
迭代器返回的 Null 值将被忽略。Iterable
EntityManager
JPA 适配器现在具有其他属性,可以在执行持久性操作后选择性地从关联的持久性上下文中刷新和清除实体。
检索网关没有指定要检索的第一条记录的机制,这是一个常见的用例。
检索网关现在支持通过将 和 属性添加到网关定义来指定此参数。
有关更多信息,请参阅检索出站网关。first-result
first-result-expression
JPA 检索网关和入站适配器现在具有一个属性,用于将结果集中的最大结果数指定为表达式。
此外,我们还引入了 replace 属性,该属性已被弃用。 和分别用于提供最大结果数或用于计算结果集最大结果数的表达式。max-results
max-number-of-results
max-results
max-results-expression
有关更多信息,请参阅 JPA 支持。
去程序:延迟表达式
以前,提供了一个属性来确定运行时的延迟值。
在复杂情况下,必须以 .
Spring Integration 3.0 引入了用于动态延迟确定的属性和子元素。
该属性现已弃用,因为您可以在 中指定标头计算。
此外,我们还引入了在表达式计算失败时控制行为的方法。
有关更多信息,请参阅 Delayer。<delayer>
delay-header-name
<delayer>
<header-enricher>
expression
expression
delay-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 传输选定的标头(以及有效负载)。
新的启用标头的选择,您需要配置适当的序列化程序或反序列化程序,以将结果写入 TCP 流。
我们添加了一个方便的机制,用于通过 TCP 传输标头和有效负载。
有关详细信息,请参阅传输标头。TcpMessageMapper
Map
MapJsonSerializer
JMS 消息驱动通道适配器
以前,在配置 时,如果要使用特定的 ,则必须声明容器 Bean 并通过设置属性将其提供给适配器。
我们添加了 ,让它直接设置在适配器上。
这是对其他几个已可用的容器属性的补充。<message-driven-channel-adapter/>
TaskExecutor
container
task-executor
XsltPayloadTransformer
现在,您可以通过设置属性来指定变压器工厂类名称。
看。transformer-factory-class
XsltPayloadTransformer
WebService 出站网关具有一个名为 的附加属性。
它用于将空响应视为未收到任何响应。
默认情况下,它是 ,但您可以将其设置为允许应用程序在回复消息有效负载中接收空。
当属性为 时,空字符串将被视为无响应,以达到该属性的目的。
默认情况下,对于 WebService 出站网关为 false。ignore-empty-responses String true false String true requires-reply requires-reply |
以前,未收到回复的网关将以静默方式结束流(带有 DEBUG 日志消息)。
默认情况下,通过此更改,大多数网关现在都会引发异常。
若要恢复到上一个行为,请设置为 。requires-reply false |