更改历史
新组件
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
,ZeroMqMessageHandler
并ZeroMqMessageProducer
已介绍。有关更多信息,请参阅ZeroMQ 支持。
一般变更
单向消息传递网关(void
方法返回类型)现在将 anullChannel
显式设置到replyChannel
标头中以忽略任何可能的下游回复。有关详细信息,请参阅设置默认回复渠道。
此外,网关方法调用程序 ( GatewayProxyFactoryBean.MethodInvocationGateway
) 现在提供托管 bean 名称作为网关代理 bean 名称和方法签名的组合。例如:sampleGateway#echo(String)
。这会影响为网关方法调用公开的消息历史记录和指标,并且还会在应用程序上下文的启动和关闭期间提供细粒度的日志。
聚合器(和重排序器)现在可以使孤立的组(持久存储中的组在应用程序重新启动后没有新消息到达)过期。有关更多信息,请参阅聚合器到期组。
被千分尺取代的旧指标已被删除。
线程屏障现在有两个单独的超时选项:requestTimeout
和triggerTimeout
.
TCP/UDP 更改
连接工厂现在支持多个发送组件(TcpSender
);它们仍然仅限于一个接收组件 ( TcpListener
)。例如,这允许入站网关和出站通道适配器共享同一个工厂,支持从服务器到客户端的请求/回复和任意消息传递。共享工厂不应与出站网关一起使用,除非使用一次性连接或ThreadAffinityClientConnectionFactory
正在使用的连接。有关详细信息,请参阅协作通道适配器和TCP 网关。
UDP 通道适配器现在可以配置为SocketCustomizer
允许设置适配器不直接支持的套接字属性。有关详细信息,请参阅UDP 适配器。
RMI 变更
该spring-integration-rmi
模块已弃用,没有替换,将在下一个主要版本中删除。有关详细信息,请参阅RMI 支持。
AMQP 变更
出站端点现在具有处理发布者确认和返回的新机制。有关更多信息,请参阅发布商确认和退货的替代机制。
一个新BatchMode.EXTRACT_PAYLOAD_WITH_HEADERS
的由AmqpInboundChannelAdapter
. 有关详细信息,请参阅入站通道适配器。
邮件更改
现在AbstractMailReceiver
可以按MimeMessage
原样生产,而无需急切地获取其内容。有关详细信息,请参阅邮件接收通道适配器。
新组件
集成模式
引入了IntegrationPattern
抽象来指示IntegrationPatternType
Spring Integration 组件属于哪个企业集成模式(an )和类别。有关此抽象及其用例的更多信息,请参阅其 JavaDocs 和集成图。
ReactiveMessageHandler
现在ReactiveMessageHandler
在框架中原生支持。有关更多信息,请参阅ReactiveMessageHandler。
ReactiveMessageSourceProducer
这ReactiveMessageSourceProducer
是一个响应式实现,MessageProducerSupport
用于将提供的内容包装MessageSource
到Flux
按需receive()
调用中。有关更多信息,请参阅反应式流支持。
Java DSL 扩展
引入了一个新的IntegrationFlowExtension
API,以允许使用自定义或组合的 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()
基于BroadcastCapableChannel
and的新运算符。BroadcastPublishSubscribeSpec
当我们将子流配置为代理支持的通道(如 等)的 pub-sub 订阅者时,此流畅的 API 具有其优势。有关更多信息SubscribableJmsChannel
,SubscribableRedisChannel
请参阅子流支持。
Spring Integration 中的事务支持现在还包括配置 a ReactiveTransactionManager
if a MessageSource
or MessageHandler
implementation 产生响应类型以供有效负载发送的选项。有关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.EncodingMode
JavaDocs 和控制 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 事件。
文件更改
该模式FileSplitter
不再需要杰克逊处理器(或类似的)依赖markersJson
项。它使用一个SimpleJsonSerializer
简单的字符串表示FileSplitter.FileMarker
实例。有关详细信息,请参阅FileSplitter。
行为改变
有关此版本中的行为更改,请参阅迁移指南。
新组件
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>>
策略以合并和计算输出消息的标头。有关更多信息,请参阅聚合器编程模型。
框架中抛出的所有MessageHandlingException
s,现在包括一个 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
,Resource
和MultiValueMap
作为请求消息payload
。现在WebFluxInboundEndpoint
支持请求有效负载验证。有关更多信息,请参阅WebFlux 支持。
MongoDb 更改
现在MongoDbMessageStore
可以使用自定义转换器进行配置。有关更多信息,请参阅MongoDB 支持。
路由器更改
您现在可以禁用回退到通道键作为通道 bean 名称。有关详细信息,请参阅动态路由器。
5.0 和 5.1 之间的变化
新组件
以下组件是 5.1 中的新组件:
AmqpDedicatedChannelAdvice
请参阅严格消息排序。
@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()
改为实现,因为该方法被调用,无论是否接收到消息。此外,PolledAmqpChannel
andPolledJmsChannel
以前没有调用afterReceiveCompleted()
with null
; 他们现在这样做了。
集成流程:生成的 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显式打开@Publisher
AOP 功能。还添加了和属性以调整配置。@EnablePublisher
<int:enable-publisher>
<int:annotation-config>
proxy-target-class
order
ProxyFactory
有关详细信息,请参阅使用注释的注释驱动配置@Publisher
。
文件更改
如果您正在使用FileExistsMode.APPEND
,或者FileExistsMode.APPEND_NO_FLUSH
您可以提供一个newFileCallback
将在创建新文件时调用的。此回调接收新创建的文件和触发回调的消息。例如,这可用于编写 CSV 标头。
now在调用FileReadingMessageSource
它之前不会检查并创建目录。因此,如果hasstart()
的入站通道适配器,则在应用程序启动期间文件系统不会出现故障。FileReadingMessageSource
autoStartup = false
有关详细信息,请参阅文件支持。
AMQP 变更
我们在. ID
_ 有关详细信息,请参阅AMQP 消息标头底部附近的注释。Timestamp
DefaultAmqpHeaderMapper
现在,contentType
标头已正确映射为通用标头映射中的条目。有关详细信息,请参阅contentType 标头。
从版本 5.1.3 开始,如果在使用手动确认时发生消息转换异常,并且定义了错误通道,则有效负载是ManualAckListenerExecutionFailedException
具有附加channel
和deliveryTag
属性的。这使错误流能够确认/确认原始消息。有关详细信息,请参阅入站消息转换。
JDBC 更改
max-rows-per-poll
JDBC Inbound Channel Adapter 和 JDBC Outbound Gateway 上的一个令人困惑的属性已被弃用,取而代之的是新引入的max-rows
属性。
当请求消息的有效负载是一个类型的实例时,JdbcMessageHandler
现在支持一种功能。batchUpdate
Iterable
INT_CHANNEL_MESSAGE
表(用于)的索引JdbcChannelMessageStore
已经过优化。如果您在此类存储中有大型消息组,您可能希望更改索引。
有关详细信息,请参阅JDBC 支持。
FTP 和 SFTP 更改
ARotatingServerAdvice
现在可用于使用入站通道适配器轮询多个服务器和目录。有关详细信息,请参阅入站通道适配器:轮询多个服务器和目录和入站通道适配器:轮询多个服务器和目录。
此外,入站适配器localFilenameExpression
实例可以包含#remoteDirectory
变量,该变量包含被轮询的远程目录。比较器的通用类型(用于对流适配器获取的文件列表进行排序)已从 更改Comparator<AbstractFileInfo<F>>
为Comparator<F>
. 有关详细信息,请参阅FTP 流式入站通道适配器和SFTP 流式入站通道适配器。
此外,入站通道适配器的同步器现在可以提供一个Comparator
. maxFetchSize
这在用于限制检索的文件时很有用。
有CachingSessionFactory
一个新属性testSession
,当它为真时,会导致工厂在从缓存中检出现有会话时对 执行test()
操作。Session
推特支持
由于 Spring Social 项目已移至生命周期结束状态,因此 Spring Integration 中的 Twitter 支持已移至 Extensions 项目。有关更多信息,请参阅Spring Integration 社交 Twitter。
JMS 支持
现在JmsSendingMessageHandler
提供deliveryModeExpression
和timeToLiveExpression
选项来确定 JMS 消息在运行时发送的相应 QoS 选项。现在DefaultJmsHeaderMapper
允许通过设置映射入站JMSDeliveryMode
和JMSExpiration
属性到true
相应的setMapInboundDeliveryMode()
和setMapInboundExpiration()
选项。当 a JmsMessageDrivenEndpoint
orJmsInboundGateway
停止时,关联的侦听器容器现在关闭;这将关闭其共享连接和任何消费者。您可以将端点配置为恢复到以前的行为。
有关更多信息,请参阅JMS 支持。
HTTP/WebFlux 支持
( statusCodeExpression
and 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 之间的变化
新组件
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 测试更容易一些。
有关更多信息,请参阅测试支持。
内容类型转换
现在我们使用InvocableHandlerMethod
基于新的基础架构进行服务方法调用,我们可以执行contentType
从有效负载到目标方法参数的转换。
有关详细信息,请参阅内容类型转换。
ErrorMessagePublisher
和ErrorMessageStrategy
我们添加了ErrorMessagePublisher
和ErrorMessageStrategy
用于创建ErrorMessage
实例。
有关详细信息,请参阅错误处理。
一般变更
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>
否定模式(通过!
前置)。有关详细信息,请参阅全局通道拦截器配置。
当候选人未能获得锁时,LockRegistryLeaderInitiator
now 发出一个新的OnFailedToAcquireMutexEvent
through 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 配置使用connectionFactory
JMS 连接工厂的默认 bean 名称,允许从组件定义中省略该属性。我们将其重命名为jmsConnectionFactory
,这是 Spring Boot 用于自动配置 JMS 连接工厂 bean 的 bean 名称。
如果您的应用程序依赖于以前的行为,您可以重命名您的connectionFactory
beanjmsConnectionFactory
或专门配置您的组件以使用您的 bean 通过使用它的当前名称。有关更多信息,请参阅JMS 支持。
邮件更改
呈现 IMAP 邮件内容的一些不一致问题已得到解决。有关详细信息,请参阅“邮件接收通道适配器”部分中的注释。
饲料变化
代替com.rometools.fetcher.FeedFetcher
ROME 中已弃用的 ,我们Resource
为FeedEntryMessageSource
. 有关详细信息,请参阅馈送适配器。
文件更改
我们引入了新的FileHeaders.RELATIVE_PATH
消息头来表示FileReadingMessageSource
.
尾部适配器现在支持idleEventInterval
在该期间文件中没有数据时发出事件。
现在的刷新谓词FileWritingMessageHandler
有一个附加参数。
文件出站通道适配器和网关 ( FileWritingMessageHandler
) 现在支持REPLACE_IF_MODIFIED
FileExistsMode
.
他们现在还支持对新写入的文件设置文件权限。
现在有一个新FileSystemMarkerFilePresentFileListFilter
的可用。有关详细信息,请参阅处理不完整数据。
现在FileSplitter
提供了一个firstLineAsHeader
选项,可以在为剩余行发出的消息中携带第一行内容作为标题。
有关详细信息,请参阅文件支持。
FTP 和 SFTP 更改
入站通道适配器现在有一个名为 的属性max-fetch-size
,当本地目录中当前没有文件时,该属性用于限制在轮询期间获取的文件数。默认情况下,它们还配置FileSystemPersistentAcceptOnceFileListFilter
有local-filter
.
您还可以通过设置新引入的属性DirectoryScanner
为入站通道适配器提供自定义实现。scanner
您现在可以将正则表达式和模式过滤器配置为始终传递目录。当您在出站网关中使用递归时,这可能很有用。
默认情况下,所有入站通道适配器(基于流和同步)现在使用适当的AbstractPersistentAcceptOnceFileListFilter
实现来防止远程文件的重复下载。
FTP 和 SFTP 出站网关现在支持REPLACE_IF_MODIFIED
FileExistsMode
获取远程文件时。
FTP 和 SFTP 流式入站通道适配器现在在消息头中添加远程文件信息。
FTP 和 SFTP 出站通道适配器(以及PUT
出站网关的命令)现在也支持InputStream
as payload
。
入站通道适配器现在可以使用新引入的RecursiveDirectoryScanner
. 请参阅FTP 入站通道适配器scanner
部分中的选项以进行注入。此外,您现在可以将这些适配器切换到。WatchService
我们将NLST
命令添加AbstractRemoteFileOutboundGateway
到执行列表文件名远程命令。
您现在可以提供FtpOutboundGateway
withworkingDirExpression
来更改当前请求消息的 FTP 客户端工作目录。
现在RemoteFileTemplate
提供了以在相同的线程边界范围内invoke(OperationsCallback<F, T> action)
执行多个调用。RemoteFileOperations
Session
我们添加了新的过滤器来检测不完整的远程文件。
FtpOutboundGateway
和SftpOutboundGateway
现在支持使用GET
orMGET
命令在成功传输后删除远程文件的选项。
有关详细信息,请参阅FTP/FTPS 适配器和SFTP 适配器。
集成属性
4.3.2 版添加了一个新的spring.integration.readOnly.headers
全局属性,让您可以自定义不应复制到Message
由MessageBuilder
. 有关详细信息,请参阅全局属性。
流变化
我们在 上添加了一个新选项,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_TOPIC
以RECEIVED_QOS
避免RECEIVED_RETAINED
在应用程序中继消息时无意传播到出站消息。
出站通道适配器现在支持主题、qos 和保留属性的表达式。默认值保持不变。有关更多信息,请参阅MQTT 支持。
STOMP 变化
ReactorNettyTcpStompClient
基于 Project Reactor3.1
和reactor-netty
扩展,我们将 STOMP 模块更改为 use 。根据基金会,我们重命名Reactor2TcpStompSessionManager
为。有关更多信息,请参阅STOMP 支持。ReactorNettyTcpStompSessionManager
ReactorNettyTcpStompClient
Web 服务更改
您现在可以为WebServiceOutboundGateway
实例提供外部配置的WebServiceTemplate
实例。
DefaultSoapHeaderMapper
现在可以将javax.xml.transform.Source
用户定义的标头映射到 SOAP 标头元素。
简单的 WebService 入站和出站网关现在可以处理完整WebServiceMessage
的payload
MTOM 附件。
有关详细信息,请参阅Web 服务支持。
Redis 变化
现在为 SpEL 表达式RedisStoreWritingMessageHandler
提供了额外的基于 - 的设置器(为了方便 Java 配置)。String
您现在也可以配置zsetIncrementExpression
on the RedisStoreWritingMessageHandler
。此外,由于Redis 命令上的选项是可选的,因此该属性已从 更改true
为。false
INCR
ZADD
您现在可以为执行 Redis 侦听器调用程序RedisInboundChannelAdapter
提供一个。Executor
此外,接收到的消息现在包含一个RedisHeaders.MESSAGE_SOURCE
标头以指示消息的来源(主题或模式)。
有关更多信息,请参阅Redis 支持。
TCP 更改
我们添加了一个新ThreadAffinityClientConnectionFactory
的将 TCP 连接绑定到线程。
您现在可以配置 TCP 连接工厂以支持PushbackInputStream
实例,让反序列化器在“预读”之后“未读”(推回)字节。
我们添加了一个ByteArrayElasticRawDeserializer
withoutmaxMessageSize
来根据需要控制和缓冲传入的数据。
有关详细信息,请参阅TCP 和 UDP 支持。
宝石火变化
现在GemfireMetadataStore
实现,让您通过向商店ListenableMetadataStore
提供实例来监听缓存事件。MetadataStoreListener
有关更多信息,请参阅Pivotal GemFire 和 Apache Geode 支持。
JDBC 更改
现在JdbcMessageChannelStore
为 提供了一个 setter ChannelMessageStorePreparedStatementSetter
,让您可以自定义商店中的消息插入。
现在ExpressionEvaluatingSqlParameterSourceFactory
提供了一个 setter sqlParameterTypes
,让您自定义参数的 SQL 类型。
有关详细信息,请参阅JDBC 支持。
指标变化
现在支持千分尺应用程序监控(从版本 5.0.2 开始)。有关详细信息,请参阅千分尺集成。
在 5.0.3 版本中对千分尺进行了更改,Meters 使其更适合在尺寸系统中使用。在 5.0.4 中进行了进一步的更改。如果您使用 Micrometer,我们建议至少使用 5.0.4 版本。
|
@EndpointId
注释
在 5.0.4 版本中引入,此注解在您使用 Java 配置时提供对 bean 命名的控制。有关更多信息,请参阅端点 Bean 名称。
4.2 和 4.3 之间的变化
新组件
4.3 版添加了许多新组件。
AMQP 异步出站网关
请参阅异步出站网关。
MessageGroupFactory
我们引入了允许在逻辑中MessageGroupFactory
控制MessageGroup
实例的策略。MessageGroupStore
我们为 , 添加了SimpleMessageGroupFactory
实现,将SimpleMessageGroup
,GroupType.HASH_SET
作为标准MessageGroupStore
实现的默认工厂。有关详细信息,请参阅消息存储。
PersistentMessageGroup
我们PersistentMessageGroup
为持久实例添加了(延迟加载代理)实现,当它们是(默认值)时MessageGroupStore
返回这个实例。有关详细信息,请参阅消息存储。getMessageGroup()
lazyLoadMessageGroups
true
FTP 和 SFTP 流式入站通道适配器
我们添加了返回每个文件的入站通道适配器InputStream
,让您无需将远程文件写入本地文件系统即可检索远程文件。有关详细信息,请参阅FTP 流式入站通道适配器和SFTP 流式入站通道适配器。
StreamTransformer
我们添加StreamTransformer
了将InputStream
有效负载转换为 abyte[]
或 a String
。有关详细信息,请参阅流转换器。
积分图
我们添加IntegrationGraphServer
了IntegrationGraphController
REST 服务,以将 Spring Integration 应用程序的运行时模型公开为图形。有关详细信息,请参阅集成图。
JDBC 锁注册表
我们添加JdbcLockRegistry
了通过数据库表共享的分布式锁。有关详细信息,请参阅JDBC 锁定注册表。
LeaderInitiator
为了LockRegistry
我们LeaderInitiator
根据LockRegistry
策略添加了实施。有关更多信息,请参阅领导力事件处理。
一般变更
本节介绍 4.3 版为 Spring Integration 带来的一般更改。
核心变化
本节介绍 Spring Integration 核心的一般更改。
链内的出站网关
以前,您可以reply-channel
在链中的出站网关上指定 a。它被完全忽略了。网关的回复发送到下一个链元素,或者,如果网关是最后一个元素,则发送到链的输出通道。现在检测到并禁止这种情况。如果您有这样的配置,请删除reply-channel
.
异步服务激活器
我们添加了一个使服务激活器同步的选项。有关详细信息,请参阅异步服务激活器。
邮件更改
本节介绍 Spring Integration Mail 功能的一般更改。
可定制的用户标志
可定制userFlag
(在 4.2.2 中添加以提供用于表示已看到邮件的标志的定制)现在在 XML 命名空间中可用。有关详细信息,请参阅在不支持时标记 IMAP 消息\Recent
。
邮件消息映射
您现在可以将入站邮件消息映射到MessageHeaders
包含邮件标头和包含电子邮件内容的有效负载。以前,有效负载始终是原始的MimeMessage
. 有关详细信息,请参阅入站邮件消息映射。
JMS 更改
本节介绍 Spring Integration JMS 功能的一般更改。
标头映射器
现在通过调用其方法DefaultJmsHeaderMapper
将标准标头映射为消息属性。有关更多信息,请参阅将消息头映射到 JMS 消息和从 JMS 消息映射。correlationId
toString()
异步网关
JMS 出站网关现在有一个async
属性。有关详细信息,请参阅异步网关。
聚合器更改
当 POJO 聚合器释放对象集合时,行为会发生变化Message<?>
。这种情况很少见,但是,如果您的应用程序这样做,您需要对 POJO 进行一些小的更改。请参阅此重要信息:该SimpleMessageGroup.getMessages()
方法返回一个unmodifiableCollection
. 请注意以获取更多信息。
TCP/UDP 更改
本节介绍 Spring Integration TCP/UDP 功能的一般更改。
活动
TcpConnectionServerListeningEvent
启动服务器连接工厂时会发出一个新的。有关详细信息,请参阅TCP 连接事件。
您现在可以在 上使用destination-expression
和socket-expression
属性<int-ip:udp-outbound-channel-adapter>
。有关详细信息,请参阅UDP 适配器。
流反序列化器
在整个消息组装完成之前无法分配最终缓冲区的各种反序列化器现在支持将接收数据的原始缓冲区池化,而不是为每条消息创建和丢弃缓冲区。有关详细信息,请参阅TCP 连接工厂。
TCP 消息映射器
消息映射器现在可以选择设置配置的内容类型标头。有关详细信息,请参阅IP 消息标头。
文件更改
本节介绍 Spring Integration File 功能的一般更改。
目标目录创建
生成的文件名FileWritingMessageHandler
可以代表一个子路径,用于在目标目录中保存文件所需的目录结构。有关详细信息,请参阅生成文件名。
现在FileReadingMessageSource
隐藏WatchService
内部类中的目录扫描逻辑。我们添加了use-watch-service
和watch-events
选项来启用此行为。WatchServiceDirectoryScanner
由于 API 不一致,我们弃用了顶层。有关WatchServiceDirectoryScanner
更多信息,请参阅。
追加和刷新
您现在可以在追加时避免刷新文件,并使用多种策略在空闲期间刷新数据。有关详细信息,请参阅使用时刷新文件APPEND_NO_FLUSH
。
保留时间戳
您现在可以配置出站通道适配器以设置目标文件的lastmodified
时间戳。有关详细信息,请参阅文件时间戳。
拆分器更改
当FileSplitter
文件被完全读取时,现在会自动关闭 FTP 或 SFTP 会话。这适用于出站网关返回InputStream
或您使用新的 FTP 或 SFTP 流通道适配器时。我们还引入了一个新markers-json
选项来转换FileSplitter.FileMarker
为 JSONString
以实现轻松的下游网络交互。有关详细信息,请参阅文件拆分器。
文件过滤器
我们添加ChainFileListFilter
了CompositeFileListFilter
. 有关详细信息,请参阅读取文件。
AMQP 变更
本节介绍 Spring Integration AMQP 功能的一般更改。
内容类型消息转换器
出站端点现在支持使用 a 进行RabbitTemplate
配置,ContentTypeDelegatingMessageConverter
以便您可以根据消息内容类型选择转换器。有关详细信息,请参阅出站消息转换。
延迟消息处理的标头
Spring AMQP 1.6 增加了对延迟消息交换的支持。标头映射现在支持此功能使用的标头 (amqp_delay
和amqp_receivedDelay
)。
AMQP 支持的通道
AMQP 支持的通道现在支持消息映射。有关更多信息,请参阅AMQP 支持的消息通道。
Redis 变化
本节介绍 Spring Integration Redis 功能的一般更改。
列表推送/弹出方向
以前,队列通道适配器总是以固定方向使用 Redis 列表,向左端推送,从右端读取。您现在可以分别使用 和 的 和 选项配置读取和rightPop
写入leftPush
方向
。有关详细信息,请参阅Redis 队列入站通道适配器和Redis 队列出站通道适配器。RedisQueueMessageDrivenEndpoint
RedisQueueOutboundChannelAdapter
队列入站网关默认序列化程序
入站网关中的默认序列化程序已更改JdkSerializationRedisSerializer
为与出站网关兼容。有关详细信息,请参阅Redis 队列入站网关。
HTTP 更改
POST
以前,对于具有没有标头的正文(例如 )的请求,content-type
正文被忽略。在此版本中,此类请求的内容类型被认为符合application/octet-stream
RFC 2616 的建议。有关更多信息,请参阅Http Inbound Components。
uriVariablesExpression
现在SimpleEvaluationContext
默认使用 a(从 4.3.15 开始)。有关详细信息,请参阅映射 URI 变量。
SFTP 更改
本节介绍 Spring Integration SFTP 功能的一般更改。
工厂豆
我们添加了一个新的工厂 bean 来简化 SFTP 的 Jsch 代理配置。有关详细信息,请参阅代理工厂 Bean。
chmod
变化
SFTP 出站网关(forput
和mput
命令)和 SFTP 出站通道适配器现在支持chmod
在上传后更改远程文件权限的属性。请参阅SFTP Outbound Channel Adapter
和SFTP Outbound Gateway
了解更多信息。
FTP 更改
本节介绍 Spring Integration FTP 功能的一般更改。
会话更改
现在FtpSession
支持null
和方法list()
,listNames()
因为底层 FTP 客户端可以使用它。有了它,您现在可以配置FtpOutboundGateway
不带remoteDirectory
表达式的 。您还可以配置<int-ftp:inbound-channel-adapter>
不带remote-directory
或remote-directory-expression
。有关详细信息,请参阅FTP/FTPS 适配器。
路由器更改
现在ErrorMessageExceptionTypeRouter
支持Exception
超类映射以避免在多个继承者的情况下相同通道的重复。为此,ErrorMessageExceptionTypeRouter
在初始化期间加载映射类以快速失败ClassNotFoundException
。
有关详细信息,请参阅路由器。
标题映射
本节介绍 4.2 和 4.3 版本之间对标头映射的更改。
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 之间的变化
新组件
4.2 版添加了许多新组件。
主要管理/JMX 返工
我们添加了一个新的MetricsFactory
策略界面。此更改与 JMX 和管理基础架构中的其他更改一起提供了对管理配置和运行时性能的更多控制。
但是,这对(某些)用户环境有一些重要的影响。
有关完整的详细信息,请参阅Metrics and Management和JMX 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>
SqlParameterSourceFactory
PreparedStatement
requestMessage
一般变更
本节介绍从 4.1 版到 4.2 版的一般更改。
文件更改
有关这些更改的更多信息,请参阅文件支持。
课程包更改
我们将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 出站网关中的回复侦听器配置为按需初始化并在空闲期后停止,而不是由网关的生命周期控制。有关详细信息,请参阅出站网关。
默认确认模式
使用隐式定义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-expression
、confirm-ack-channel
和confirm-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
模式(默认为)。true
org.w3c.dom.NodeList
有关更多信息,请参阅拆分 XML 消息。
HTTP 更改
本节介绍 Spring Integration HTTP 功能的一般更改。
CORS
HTTP 入站端点 (<int-http:inbound-channel-adapter>
和<int-http:inbound-gateway>
) 现在允许配置跨域资源共享 (CORS)。
有关更多信息,请参阅跨域资源共享 (CORS) 支持。
表格数据
我们添加了代理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 适配器。
默认 Sftp 会话工厂
以前,DefaultSftpSessionFactory
无条件允许连接到未知主机。这现在是可配置的(默认值:)false
。
工厂现在需要一个已配置的knownHosts
, 文件,除非该allowUnknownKeys
属性是true
(默认值:false
)。
消息会话回调
我们MessageSessionCallback<F, T>
介绍了Session
使用.requestMessage
<int-(s)ftp:outbound-gateway/>
有关更多信息,请参阅使用MessageSessionCallback
和MessageSessionCallback。
Websocket 变化
我们添加WebSocketHandlerDecoratorFactory
了ServerWebSocketContainer
对内部WebSocketHandler
. 有关更多信息,请参阅WebSockets 命名空间支持。
应用程序事件适配器更改
适配器现在ApplicationEvent
可以payload
用作event
直接允许省略自定义ApplicationEvent
扩展。为此,我们引入了publish-payload
布尔属性,已在<int-event:outbound-channel-adapter>
. 有关更多信息,请参阅SpringApplicationEvent
支持。
4.0 和 4.1 之间的变化
新组件
4.1 版添加了许多新组件。
承诺<?> 网关
消息传递网关方法现在支持 ReactorPromise
返回类型。请参阅异步网关。
WebSocket 支持
该WebSocket
模块现在可用。它完全基于 Spring WebSocket 和 Spring Messaging 模块,并提供一个<inbound-channel-adapter>
和一个<outbound-channel-adapter>
. 有关更多信息,请参阅WebSockets 支持。
分散-聚集企业集成模式
我们实施了分散-聚集的企业集成模式。有关详细信息,请参阅分散-聚集。
路由滑动模式
我们添加了路由滑动 EIP 模式实现。有关详细信息,请参阅路由表。
幂等接收者模式
<idempotent-receiver>
我们通过在 XML 中添加组件或 Java 配置的IdempotentReceiverInterceptor
和IdempotentReceiver
注释来添加幂等接收器企业集成模式实现。有关更多信息,请参阅Idempotent Receiver Enterprise Integration Pattern和Javadoc。
恩赐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()
。有关详细信息,请参阅[警告]。
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
属性,用于Exception
在request-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-transacted
AMQPMessageChannel
实例的属性。有关更多信息,请参阅AMQP 支持的消息通道。
系统日志适配器
默认的 syslog 消息转换器现在可以选择在有效负载中保留原始消息,同时仍设置标头。有关详细信息,请参阅Syslog 入站通道适配器。
聚合器建议链
Aggregator
Resequencer
现在支持和<expire-advice-chain/>
子<expire-transactional/>
元素来建议forceComplete
操作。有关更多信息,请参阅使用 XML 配置聚合器。
重测序仪更改
当重新排序器中的消息组超时(使用group-timeout
或 a MessageGroupStoreReaper
)时,默认情况下,迟到的消息现在会立即被丢弃。请参阅重新排序器。
可选 POJO 方法参数
Spring Integration 现在始终如一地处理 Java 8 的Optional
类型。请参阅配置服务激活器。
QueueChannel
支持队列类型
QueueChannel
backedQueue type
已从更改BlockingQueue
为更通用的Queue
. 此更改允许使用任何外部Queue
实现(例如,Reactor 的PersistentQueue
)。请参阅QueueChannel
配置。
ChannelInterceptor
变化
现在ChannelInterceptor
支持附加afterSendCompletion()
和afterReceiveCompletion()
方法。请参阅通道拦截器。
IMAP 窥视
从 4.1.1 版开始,如果您将mail.[protocol].peek
JavaMail 属性显式设置为false
(其中[protocol]
isimap
或imaps
),则行为会发生变化。请参阅[重要]。
3.0 和 4.0 之间的变化
新组件
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 出站命令网关。
RedisLockRegistry
和GemfireLockRegistry
RedisLockRegistry
和GemfireLockRegistry
现在可用于支持对多个应用程序实例和服务器可见的全局锁。这些可以与跨多个应用程序实例的聚合消息处理程序一起使用,以便仅在一个实例上发生组释放。有关详细信息,请参阅Redis 锁注册表、Gemfire 锁注册表和聚合器。
@Poller
基于注释的消息传递配置现在可以具有poller
属性。这意味着用@ServiceActivator
,@Aggregator
和类似注解注解的方法现在可以使用对inputChannel
a 的引用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
注释来标记类中的MessageChannel
bean @Configuration
。有关详细信息,请参阅注释支持。
元消息注释
消息注释(@ServiceActivator
、@Router
、@MessagingGateway
和其他)现在可以配置为用户定义的消息注释的元注释。此外,用户定义的注释可以具有相同的属性(inputChannel
、@Poller
、autoStartup
等)。有关详细信息,请参阅注释支持。
一般变更
本节介绍从 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 还提供了一个内置的#xpath
SpEL 函数用于表达式。.
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-timeout
andgroup-timeout-expression
属性。这些属性允许强制完成部分,前提是不释放组并且在指定的时间内没有进一步的消息到达。有关更多信息,请参阅使用 XML 配置聚合器。<int:aggregator>
<int:resequencer>
MessageGroup
ReleaseStrategy
Redis 元数据存储
现在RedisMetadataStore
实现ConcurrentMetadataStore
,让它被使用,例如,在AbstractPersistentAcceptOnceFileListFilter
多应用程序实例或服务器环境中的实现中。有关详细信息,请参阅Redis 元数据存储、读取文件、FTP 入站通道适配器和SFTP 入站通道适配器。
JdbcChannelMessageStore
和PriorityChannel
T`JdbcChannelMessageStore` 现在实现了PriorityCapableChannelMessageStore
,让它用作实例的message-store
引用。priority-queue
有关更多信息,请参阅支持消息通道。
FTP 超时
现在DefaultFtpSessionFactory
公开connectTimeout
、defaultTimeout
和dataTimeout
属性,避免需要子类化工厂来设置这些公共属性。这些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 之间的变化
新组件
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
,我们还推出了新的ConfigurableMongoDbMessageStore
。MessageStore
这为 MongoDB提供了更健壮和灵活的实现。它与现有商店没有向后兼容性,但我们建议将其用于新应用程序。现有应用程序可以使用它,但旧存储中的消息不可用。有关更多信息,请参阅MongoDb 支持。
系统日志支持
在 2.2 的基础上SyslogToMapTransformer
,Spring Integration 3.0 引入了专门为接收 SYSLOG 消息而定制的入站通道适配器UDP
。TCP
有关详细信息,请参阅系统日志支持。
tail
支持
我们添加了文件入站通道适配器,tail
当将行添加到文本文件的末尾时,它们使用命令生成消息。请参阅“尾随文件”。
JMX 支持
我们添加了<int-jmx:tree-polling-channel-adapter/>
. 此适配器查询 JMX MBean 树并发送带有有效负载的消息,该有效负载是与查询匹配的对象图。默认情况下,MBean 映射到原语和简单对象(例如Map
、List
和数组)。它允许简单地转换为例如 JSON。
现在IntegrationMBeanExporter
允许ObjectNamingStrategy
使用naming-strategy
属性配置自定义。
有关更多信息,请参阅JMX 支持。
TCP/IP 连接事件和连接管理
TcpConnection
现在,当打开或关闭连接或发生异常时,实例会发出ApplicationEvent
实例(特别是实例)。此更改允许应用程序通过使用正常的 Spring机制TcpConnectionEvent
来了解 TCP 连接的更改。ApplicationListener
我们重命名AbstractTcpConnection
为TcpConnectionSupport
. 作为此类子类的自定义连接可以使用其方法来发布事件。同样,我们重命名AbstractTcpConnectionInterceptor
为TcpConnectionInterceptorSupport
.
此外,我们添加了<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
是公开课。它允许您以编程方式配置GatewayProxyFactoryBean
from Java。
有关详细信息,请参阅消息传递网关。
HTTP 端点更改
-
出站端点
encode-uri
:<http:outbound-gateway/>
现在<http:outbound-channel-adapter/>
提供一个encode-uri
属性以允许在发送请求之前禁用 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 标头:以前,If-Modified-Since
和If-Unmodified-Since
HTTP 标头在映射到DefaultHttpHeaderMapper
. 现在,除了更正该问题外,DefaultHttpHeaderMapper
还为任何接受日期时间值的 HTTP 标头提供格式化字符串的日期解析。 -
入站端点表达式变量:除了现有的
#requestParams
and之外#pathVariables
,<http:inbound-gateway/>
and<http:inbound-channel-adapter/>
现在还支持其他有用的变量:#matrixVariables
、、、和。这些变量在有效负载和标头表达式中都可用。#requestAttributes
#requestHeaders
#cookies
-
出站端点 'uri-variables-expression':HTTP 出站端点现在支持
uri-variables-expression
属性来指定一个Expression
以评估Map
URL 模板中所有 URI 变量占位符的 a。这允许基于传出消息选择不同的表达式映射。
有关详细信息,请参阅HTTP 支持。
杰克逊支持 (JSON)
-
引入了 JSON 转换的新抽象。当前提供了 Jackson 1.x 和 Jackson 2 的实现,版本由类路径中的存在确定。以前,仅支持 Jackson 1.x。
-
ObjectToJsonTransformer
和JsonToObjectTransformer
现在发出/使用包含类型信息的标头。
有关更多信息,请参阅Transformer中的“JSON 转换器” 。
链元素id
属性
以前, a 中id
元素的属性<chain>
被忽略,并且在某些情况下是不允许的。现在,id
a 中的所有元素都允许使用该属性<chain>
。链元素的bean名称是周围链id
和id
元素本身的组合。例如:'myChain$child.myTransformer.handler'。有关更多信息,请参阅消息处理程序链。
聚合器 'empty-group-min-timeout' 属性
提供AbstractCorrelatingMessageHandler
了一个新属性,称为empty-group-min-timeout
允许空组到期比到期部分组以更长的时间表运行。空组不会从 中删除,MessageStore
直到它们至少在此毫秒数内没有被修改。有关更多信息,请参阅使用 XML 配置聚合器。
持久文件列表过滤器(文件,(S)FTP)
现在可以使用使用持久化的新FileListFilter
实现。MetadataStore
您可以使用这些来防止系统重新启动后出现重复文件。有关详细信息,请参阅读取文件、FTP 入站通道适配器和SFTP 入站通道适配器。
直接通道负载平衡配置
以前,在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
命令,可以重命名远程文件。
网关现在支持递归ls
和mget
命令,可以检索远程文件树。
网关现在支持put
和mput
命令,可以将文件发送到远程服务器。
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-channel
或replyChannel
消息头。但是,在某些情况下,外部系统可能并不总是返回结果(例如,<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-reply WebService 出站网关为 false。
|
请注意,该requiresReply
属性以前存在,但在 中设置为false
,AbstractReplyProducingMessageHandler
并且无法使用 XML 命名空间在出站网关上对其进行配置。
以前,没有收到回复的网关会默默地结束流程(使用 DEBUG 日志消息)。默认情况下,通过此更改,大多数网关现在都会引发异常。要恢复到以前的行为,请设置requires-reply 为false 。
|
AMQP 出站网关标头映射
以前,<int-amqp:outbound-gateway/> 在调用消息转换器之前映射标头,并且转换器可以覆盖诸如content-type
. 出站适配器在转换后映射标头,这意味着使用content-type
来自出站Message
(如果存在)的标头。
从此版本开始,网关现在映射消息转换后的标头,与适配器保持一致。如果您的应用程序依赖于先前的行为(转换器的标头覆盖映射的标头),您需要过滤这些标头(在消息到达网关之前)或适当地设置它们。受和影响SimpleMessageConverter
的标头。自定义消息转换器可以设置其他标头。content-type
content-encoding
存储过程组件改进
对于标准方法不支持的更复杂的数据库特定类型,我们为具有 OUT 方向CallableStatement.getObject
的元素引入了两个新的附加属性:<sql-parameter-definition/>
-
type-name
-
return-type
row-mapper
存储过程入站通道适配器子元素的属性<returning-resultset/>
现在支持对RowMapper
bean 定义的引用。以前,它只包含一个类名(仍然受支持)。
有关详细信息,请参阅存储过程。
Web 服务出站 URI 配置
Web 服务出站网关“uri”属性现在支持<uri-variable/>
替换 Spring Web 服务支持的所有 URI 方案。有关详细信息,请参阅出站 URI 配置。
Redis 适配器更改
Redis 入站通道适配器现在可以使用属性null
值serializer
,原始数据是消息负载。
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-result
和first-result-expression
属性添加到网关定义来指定此参数。有关更多信息,请参阅检索出站网关。
JPA 检索网关和入站适配器现在具有一个属性,可将结果集中的最大结果数指定为表达式。此外,我们引入了max-results
replace 属性max-number-of-results
,该属性已被弃用。
max-results
和max-results-expression
用于分别提供结果集中的最大结果数或计算最大结果数的表达式。
有关更多信息,请参阅JPA 支持。
延迟器:延迟表达式
以前,<delayer>
提供了一个delay-header-name
属性来确定运行时的延迟值。在复杂的情况下,<delayer>
必须以 . 开头<header-enricher>
。Spring Integration 3.0 引入了用于动态延迟确定的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 传输选定的标头(以及有效负载)。新TcpMessageMapper
的启用标头选择,您需要配置适当的序列化器或反序列化器以将结果写入Map
TCP 流。我们添加了一个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 之间的变化
新组件
2.2 版添加了许多新组件。
RedisStore
入站和出站通道适配器
Spring Integration 现在具有入站和出站通道适配器,允许您在 Redis 集合中RedisStore
写入和读取有效负载。Message
有关详细信息,请参阅RedisStore 出站通道适配器和Redis 存储入站通道适配器。
MongoDB 入站和出站通道适配器
Message
Spring Integration 现在具有 MongoDB 入站和出站通道适配器,允许您在 MongoDB 文档存储中写入和读取有效负载。有关更多信息,请参阅MongoDB 出站通道适配器和MongoDB 入站通道适配器。
一般变更
本节介绍从 2.1 版到 2.2 版的一般更改。
向端点添加行为
添加<advice-chain/>
到轮询器的功能已经有一段时间了。但是,由此添加的行为会影响整个集成流程。它没有解决向单个端点添加(例如)重试的能力。2.2 版本引入了<request-handler-advice-chain/>
许多端点。
此外,我们为此添加了三个标准建议类:
-
MessageHandlerRetryAdvice
-
MessageHandlerCircuitBreakerAdvice
-
ExpressionEvaluatingMessageHandlerAdvice
有关更多信息,请参阅向端点添加行为。
事务同步和伪事务
轮询器现在可以参与 Spring 的事务同步功能。这允许通过入站通道适配器同步诸如重命名文件之类的操作,具体取决于事务是提交还是回滚。
此外,您可以在不存在“真实”交易时启用这些功能,通过PseudoTransactionManager
.
有关详细信息,请参阅事务同步。
文件适配器:改进的文件覆盖和追加处理
使用文件出站通道适配器或文件出站网关时,可以使用新mode
属性。在 Spring Integration 2.2 之前,目标文件在存在时会被替换。现在您可以指定以下选项:
-
REPLACE
(默认) -
APPEND
-
FAIL
-
IGNORE
有关详细信息,请参阅处理现有目标文件。
Spring-AMQP 1.1
Spring Integration 现在使用 Spring AMQP 1.1。这使得在 Spring Integration 应用程序中可以使用几个特性,包括:
-
出站网关的固定回复队列
-
HA(镜像)队列
-
发布者确认
-
回信
-
支持死信交换和死信队列
JDBC 支持 - 存储过程组件
SpEL 支持
在使用 Spring Integration JDBC Adapter 的存储过程组件时,您现在可以使用 Spring 表达式语言 (SpEL) 提供存储过程名称或存储函数名称。
这样做可以让您指定要在运行时调用的存储过程。例如,您可以提供您希望通过消息头执行的存储过程名称。有关详细信息,请参阅存储过程。
JDBC 支持:特定于通道的消息存储实现
我们添加了一个新的特定于消息通道的消息存储实现,使用特定于数据库的 SQL 查询提供了一个更具可扩展性的解决方案。有关更多信息,请参阅支持消息通道。
有序关机
stopActiveComponents()
我们添加了一个调用IntegrationMBeanExporter
. 它允许以有序的方式关闭 Spring Integration 应用程序,不允许向某些适配器发送新的入站消息,并等待一段时间以允许运行中的消息完成。
ObjectToJsonTransformer
默认情况下,ObjectToJsonTransformer
现在将content-type
标头设置为application/json
. 有关详细信息,请参阅变压器。
HTTP 支持
默认情况下不再启用基于 HTTP 的 Java 序列化。以前,在对象上设置时expected-response-type
,Serializable
标Accept
头未正确设置。我们更新了SerializingHttpMessageConverter
将Accept
标题设置为application/x-java-serialized-object
. 但是,因为这可能导致与现有应用程序不兼容,我们决定不再自动将此转换器添加到 HTTP 端点。
如果您希望使用 Java 序列化,您需要通过使用属性(当您使用 XML 配置时)或使用方法(在 Java 中)将其添加SerializingHttpMessageConverter
到适当的端点。message-converters
setMessageConverters()
或者,您可能希望考虑改用 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项目,为其组件提供了一个瘦包装器。MessageStore
MessageGroupStore
有关更多详细信息,请参阅Pivotal GemFire 和 Apache Geode 支持。
AMQP 支持
Spring Integration 2.1 添加了几个通道适配器,用于使用高级消息队列协议(AMQP) 接收和发送消息。此外,Spring Integration 还提供了点对点消息通道和发布-订阅消息通道,两者均由 AMQP 交换和队列提供支持。
有关详细信息,请参阅AMQP 支持。
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
给公开的请求通道,然后期待回复消息。然后,回复消息成为评估表达式以丰富目标有效负载的根对象。
有关更多详细信息,请参阅有效负载丰富器。
框架重构
我们以多种方式重构了 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 表达式的任何地方利用它们。
TaskScheduler
和Trigger
Spring 3.0 定义了两个与调度相关的新策略:TaskScheduler
和Trigger
. Spring Integration(使用大量调度)现在建立在这些之上。事实上,Spring Integration 1.0 最初定义了一些组件(例如CronTrigger
),现在已经迁移到 Spring 3.0 的核心 API 中。现在,您可以受益于在整个应用程序上下文中重用相同的组件(不仅仅是 Spring Integration 配置)。我们还通过提供用于直接配置速率、延迟、cron 表达式和触发器引用的属性,大大简化了 Spring Integration 轮询器的配置。有关示例配置,请参阅通道适配器。
RestTemplate
和HttpMessageConverter
我们的出站 HTTP 适配器现在委托给 SpringRestTemplate
来执行 HTTP 请求并处理其响应。这也意味着您可以重用任何自定义HttpMessageConverter
实现。有关更多详细信息,请参阅HTTP 出站组件。
新的通道适配器和网关
我们在 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 Routers、Messaging Gateways、HTTP Outbound Components、Message和Aggregator。如果您直接依赖某些核心组件(Message
、MessageHeaders
、MessageChannel
、MessageBuilder
等),则需要更新任何导入语句。我们重组了一些包装,以提供扩展领域模型所需的灵活性,同时避免任何循环依赖(避免这种“缠结”是框架的策略)。
新的源代码控制管理和构建基础架构
在 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下载它。