2.2 和 3.0 之间的变化
新组件
版本 3.0 添加了许多新组件。
HTTP 请求映射
HTTP 模块现在为入站终端节点提供强大的请求映射支持。
我们将类替换为 ,它在应用程序上下文中的 bean 名称下注册。
在解析 HTTP 入站端点时,要么注册一个新的 Bean,要么重用现有的 Bean。
为了实现灵活的请求映射配置, Spring 集成提供了 的子元素 和 .
现在,两个 HTTP 入站端点都完全基于 Spring MVC 3.1 中引入的请求映射基础设施。
例如,单个入站终端节点支持多个路径。
有关更多信息,请参阅 HTTP 命名空间支持。UriPathHandlerMapping
IntegrationRequestMappingHandlerMapping
integrationRequestMappingHandlerMapping
IntegrationRequestMappingHandlerMapping
<request-mapping/>
<http:inbound-channel-adapter/>
<http:inbound-gateway/>
Spring 表达式语言 (SpEL) 配置
我们添加了一个新的允许配置自定义实现和函数,以便在整个框架中的 SPEL 表达式中使用。
有关更多信息,请参阅 Spring 表达式语言 (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 入站适配器
-
Feed 入站通道适配器
我们添加了新的基于队列的组件。
我们添加了 and 组件,以分别在 Redis List 上执行 'right pop' 和 'left push' 操作。<int-redis:queue-inbound-channel-adapter/>
<int-redis:queue-outbound-channel-adapter/>
有关更多信息,请参阅“Redis 支持”。
Header Channel Registry
现在,您可以指示框架将回复通道和错误通道存储在注册表中,以便以后解决。
这对于 or 可能丢失的情况(例如,在序列化消息时)非常有用。
有关更多信息,请参阅 Header Enricher 。replyChannel
errorChannel
MongoDB 支持:新增ConfigurableMongoDbMessageStore
除了现有的 之外,我们还引入了新的 .
这为 MongoDB 提供了更强大、更灵活的实现。
它与现有商店不向后兼容,但我们建议将其用于新应用程序。
现有应用程序可以使用它,但旧存储中的消息不可用。
有关更多信息,请参阅 MongoDb 支持。eMongoDbMessageStore
ConfigurableMongoDbMessageStore
MessageStore
Syslog 支持
在 2.2 的基础上,Spring Integration 3.0 引入了专为接收 SYSLOG 消息而定制的入站通道适配器。
有关更多信息,请参阅 Syslog 支持。SyslogToMapTransformer
UDP
TCP
tail
支持
我们添加了文件入站通道适配器,当将行添加到文本文件的末尾时,这些适配器使用命令生成消息。
请参见 'tail'ing 文件。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 连接事件。
入站通道适配器脚本支持
现在支持 using 和 child 元素来创建 .
请参阅通道适配器表达式和脚本。<int:inbound-channel-adapter/>
<expression/>
<script/>
MessageSource
内容扩充器:标头扩充支持
内容扩充器现在为子元素提供配置,以根据来自底层消息流的回复消息使用标头来扩充出站消息。
有关更多信息,请参阅 Payload Enricher。<header/>
一般更改
本节介绍从版本 2.2 到版本 3.0 的一般更改。
消息 ID 生成
以前,消息 ID 是使用 JDK 方法生成的。
在此版本中,默认机制已更改为使用更高效、速度更快的算法。
此外,我们还添加了更改用于生成消息 ID 的策略的功能。
有关更多信息,请参阅消息 ID 生成。UUID.randomUUID()
“<gateway>” 更改
现在,您可以在所有网关方法中设置通用标头,并且我们添加了更多选项,用于向消息添加有关调用了哪个方法的信息。
现在,您可以完全自定义网关方法调用映射到消息的方式。
现在是 public 类。
它允许您以编程方式配置 from Java.GatewayMethodMetadata
GatewayProxyFactoryBean
有关更多信息,请参阅 Messaging Gateway。
HTTP 端点更改
-
出站终端节点
encode-uri
:,现在提供一个属性,以允许在发送请求之前禁用 URI 对象的编码。<http:outbound-gateway/>
<http:outbound-channel-adapter/>
encode-uri
-
Inbound Endpoint
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
-
入站终端节点表达式变量:除了现有的 和 、 和 现在还支持其他有用的变量:、 、 和 。 这些变量在有效负载和标头表达式中均可用。
#requestParams
#pathVariables
<http:inbound-gateway/>
<http:inbound-channel-adapter/>
#matrixVariables
#requestAttributes
#requestHeaders
#cookies
-
出站终端节点 'uri-variables-expression':HTTP 出站终端节点现在支持指定属性以评估 URL 模板中的所有 URI 变量占位符。 这允许根据传出消息选择不同的表达式映射。
uri-variables-expression
Expression
Map
有关更多信息,请参阅 HTTP 支持。
Jackson 支持 (JSON)
-
引入了 JSON 转换的新抽象。 目前提供了 Jackson 1.x 和 Jackson 2 的实现,版本由 Classpath 中的存在决定。 以前,仅支持 Jackson 1.x。
-
现在发出/使用包含类型信息的标头。
ObjectToJsonTransformer
JsonToObjectTransformer
有关详细信息,请参阅 Transformer 中的“JSON 转换器”。
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
永久文件列表过滤器 (file, (S)FTP)
使用持久化的新实现现已推出。
您可以使用这些来防止在系统重新启动后出现重复文件。
有关更多信息,请参阅读取文件、FTP 入站通道适配器和 SFTP 入站通道适配器。FileListFilter
MetadataStore
Direct Channel Load Balancing 配置
以前,在通道的子元素上进行配置时,唯一可用的选项是使用预定义的值枚举,该枚举不允许开发人员设置自定义实现。
现在,您可以使用 来提供对 .
有关更多信息,请参阅 DirectChannel
。LoadBalancingStrategy
dispatcher
LoadBalancingStrategy
load-balancer-ref
LoadBalancingStrategy
PublishSubscribeChannel 行为
以前,发送到没有订阅者的 <publish-subscribe-channel/> 会返回结果。
如果与 a 结合使用,则会导致引发异常。
现在,它有一个名为 (default: ) 的属性。
如果消息至少发送给最小数量的订阅者,则 send 操作被视为成功(即使该数字为零)。
如果应用程序希望在这些情况下收到异常,请将最小订户数设置为至少 1。false
MessagingTemplate
PublishSubscribeChannel
minSubscribers
0
FTP、SFTP 和 FTPS 更改
默认情况下,FTP、SFTP 和 FTPS 终端节点不再缓存会话。
我们从所有端点中删除了 deprecated 属性。
以前,由此属性的值控制的嵌入式缓存机制不提供限制缓存大小的方法,缓存大小可以无限增长。
版本 2.1 引入了 ,它成为缓存会话的首选(现在是唯一的)方法。cached-sessions
CachingConnectionFactory
CachingConnectionFactory
现在提供了一个新方法: .
此方法会立即关闭空闲会话,并导致正在使用的会话在返回到缓存时关闭。resetCache()
现在,(与 一起)支持通过单个 SSH 连接(仅限 SFTP)进行多路复用通道。DefaultSftpSessionFactory
CachingSessionFactory
FTP、SFTP 和 FTPS 入站适配器
以前,无法覆盖用于处理从远程服务器检索的文件的默认过滤器。
该属性确定要检索哪些文件,但 使用 .
这意味着,如果使用与以前复制的文件同名检索文件的新副本,则不会从适配器发送任何消息。filter
FileReadingMessageSource
AcceptOnceFileListFilter
在此版本中,新属性允许您覆盖默认过滤器(例如,使用或其他自定义过滤器)。local-filter
AcceptAllFileListFilter
如果您希望在 JVM 执行之间保持 的行为,您现在可以配置一个自定义过滤器来保留状态,可能在文件系统上。AcceptOnceFileListFilter
入站通道适配器现在支持该属性,该属性将本地文件修改的时间戳设置为来自服务器的时间戳(默认值:)。preserve-timestamp
false
FTP、SFTP 和 FTPS 网关
网关现在支持该命令,从而启用远程文件的重命名。mv
网关现在支持递归和命令,从而支持检索远程文件树。ls
mget
网关现在支持 and commands,允许将文件发送到远程服务器。put
mput
现在支持该属性,从而在检索期间启用本地文件的命名。
默认情况下,使用与远程文件相同的名称。local-filename-generator-expression
现在支持该属性,从而在检索期间(基于远程目录)启用本地目录的命名。local-directory-expression
远程文件模板
在 FTP 和 SFTP 模块使用的实现上提供了新的更高级别的抽象 ()。
虽然它由终端节点在内部使用,但您也可以以编程方式使用此抽象。
像所有 Spring 实现一样,它可靠地关闭底层 session,同时允许对 session 进行低级访问。RemoteFileTemplate
Session
*Template
有关更多信息,请参阅 FTP/FTPS 适配器和 SFTP 适配器。
出站网关的 'requires-reply' 属性
所有出站网关(例如 or )都是为“请求-回复”场景设计的。
响应应来自外部服务,并发布到 或 消息标头。
但是,在某些情况下,外部系统可能并不总是返回结果(例如,
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 出站网关具有一个名为 的附加属性。
它用于将空响应视为未收到响应。
默认情况下,它是 ,但您可以将其设置为允许应用程序在回复消息负载中接收空。
当 attribute 为 时,空字符串将被视为 no response for the attribute 。
默认情况下,对于 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/> 在调用消息转换器之前映射了标头,并且转换器可以覆盖诸如 .
出站适配器在转换后映射 headers,这意味着使用来自 outbound (如果存在) 的 headers。content-type
content-type
Message
从此版本开始,网关现在在消息转换后映射标头,与适配器一致。
如果您的应用程序依赖于以前的行为(其中转换器的 Headers 覆盖了映射的 Headers),则需要筛选这些 Headers(在消息到达网关之前)或适当地设置它们。
受 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 出站通道适配器现在具有用于确定运行时的 Redis 主题的属性。topic-expression
Message
Redis 入站通道适配器除了 existing 属性外,现在还具有该属性。topics
topic-patterns
有关更多信息,请参阅 Redis 支持。
Advising Filters
以前,当 a 具有 时,丢弃操作全部在通知链的范围内执行(包括 上的任何下游流)。
filter 元素现在具有一个名为 (default: ) 的属性,以允许在通知链完成后执行 discard 操作。
请参阅 Advice Filters。<filter/>
<request-handler-advice-chain/>
discard-channel
discard-within-advice
true
使用注释为终端节点提供建议
现在可以使用 annotation 配置请求处理程序通知链。 请参阅使用注释通知终端节点。
ObjectToStringTransformer 改进
此转换器现在可以正确地转换和有效负载。
有关更多信息,请参阅 Transformer。byte[]
char[]
String
JPA 支持更改
要保留或合并的有效负载现在可以是 类型。java.lang.Iterable
在这种情况下,返回的每个对象都被视为一个实体,并使用基础 .
迭代器返回的 Null 值将被忽略。Iterable
EntityManager
JPA 适配器现在具有其他属性,可以在执行持久性操作后选择性地从关联的持久性上下文中刷新和清除实体。
检索网关没有指定要检索的第一条记录的机制,这是一种常见的使用案例。
检索网关现在支持通过向网关定义添加 and 属性来指定此参数。
有关更多信息,请参阅检索出站网关。first-result
first-result-expression
JPA 检索网关和入站适配器现在具有一个属性,用于以表达式的形式指定结果集中的最大结果数。
此外,我们还引入了 replace 属性,该属性已弃用。 和 用于提供最大结果数,或用于分别计算结果集中的最大结果数的表达式。max-results
max-number-of-results
max-results
max-results-expression
有关更多信息,请参阅 JPA 支持。
延时器:延迟表达式
以前,它提供了一个属性来确定运行时的延迟值。
在复杂情况下,the 前面必须有 .
Spring Integration 3.0 引入了用于动态延迟确定的属性和子元素。
该属性现已弃用,因为您可以在 .
此外,我们还引入了 来控制表达式计算失败时的行为。
有关更多信息,请参阅延迟器。<delayer>
delay-header-name
<delayer>
<header-enricher>
expression
expression
delay-header-name
expression
ignore-expression-failures
JDBC 消息存储改进
Spring 集成 3.0 为 MySQL 版本 5.6.4 及更高版本添加了一组新的 DDL 脚本。 现在 MySQL 支持小数秒,因此在从基于 MySQL 的消息存储轮询时改进了 FIFO 排序。 有关更多信息,请参阅通用 JDBC 消息存储。
IMAP 空闲连接异常
以前,如果 IMAP 空闲连接失败,则会记录该连接,但没有通知应用程序的机制。
此类异常现在会生成实例。
应用程序可以通过使用配置为接收 (或其超类之一) 的 或 any 来获取这些事件。ApplicationEvent
<int-event:inbound-channel-adapter>
ApplicationListener
ImapIdleExceptionEvent
消息标头和 TCP
TCP 连接工厂现在支持配置灵活的机制,以通过 TCP 传输选定的标头(以及有效负载)。
new 启用标头的选择,您需要配置适当的序列化程序或反序列化程序以将结果写入 TCP 流。
我们添加了一个方便的机制,用于通过 TCP 传输标头和有效负载。
有关更多信息,请参阅传输标头。TcpMessageMapper
Map
MapJsonSerializer
JMS 消息驱动通道适配器
以前,在配置 时,如果您希望使用特定的 ,则必须声明一个容器 Bean 并通过设置属性将其提供给适配器。
我们添加了 ,让它直接在适配器上设置。
这是对其他几个已可用的容器属性的补充。<message-driven-channel-adapter/>
TaskExecutor
container
task-executor
XsltPayloadTransformer
现在,您可以通过设置属性来指定 transformer 工厂类名称。
看。transformer-factory-class
XsltPayloadTransformer