JDBC 支持
Spring Integration 提供了通过数据库查询接收和发送消息的通道适配器。通过这些适配器,Spring Integration 不仅支持普通的 JDBC SQL 查询,还支持存储过程和存储函数的调用。
此依赖项为项目所需:
- Maven
- Gradle
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-jdbc</artifactId>
<version>7.0.2</version>
</dependency>
compile "org.springframework.integration:spring-integration-jdbc:7.0.2"
默认情况下,以下 JDBC 组件可用:
Spring Integration JDBC 模块还提供了一个 JDBC 消息存储。
章节总结
📄️ 入站通道适配器
入站通道适配器的主要功能是执行SQL SELECT查询并将结果集转换为消息。消息负载是整个结果集(以列表形式表示),列表中项目的类型取决于行映射策略。默认策略是通用映射器,它为查询结果中的每一行返回一个Map。可选地,您可以通过添加对RowMapper实例的引用来更改此策略(有关行映射的更多详细信息,请参阅Spring JDBC文档)。
📄️ 出站通道适配器
出站通道适配器是入站通道适配器的反向操作:其作用是处理消息并利用它执行 SQL 查询。默认情况下,消息的有效负载和头部可作为查询的输入参数,如下例所示:
📄️ 出站网关
出站网关类似于出站适配器和入站适配器的组合:它的作用是处理消息,并使用该消息执行 SQL 查询,然后通过将结果发送到回复通道来响应。默认情况下,消息有效负载和标头可用作查询的输入参数,如下例所示:
📄️ JDBC 消息存储
Spring Integration 提供了两种特定于 JDBC 的消息存储实现。JdbcMessageStore 适用于聚合器和声明检查模式。JdbcChannelMessageStore 实现则提供了一个更针对性强且可扩展的实现,专门用于消息通道。
📄️ JDBC 通道消息存储 JSON 序列化
版本 7.0 引入了对 JdbcChannelMessageStore 的 JSON 序列化支持。默认情况下,Spring Integration 使用 Java 序列化将消息存储在数据库中。新的 JSON 序列化选项提供了一种替代的序列化机制。
📄️ 存储过程
在某些情况下,仅靠普通的 JDBC 支持是不够的。您可能需要处理遗留的关系数据库模式,或者有复杂的数据处理需求,但最终不得不使用存储过程或存储函数。自 Spring Integration 2.1 版本起,我们提供了三个组件来执行存储过程或存储函数:
📄️ JDBC 组件的 Java DSL
版本 7.0 在 JDBC 模块中引入了用于通道适配器的 Java DSL API。核心的 Java DSL 类(通常也是起点)是 org.springframework.integration.jdbc.dsl.Jdbc 工厂类。它提供了一个不言自明的方法来启动目标通道适配器或网关的配置。用于开箱即用通道适配器的标准 IntegrationComponentSpec 实现包括:
📄️ JDBC 锁注册表
版本 4.3 引入了 JdbcLockRegistry。某些组件(例如聚合器和重排器)使用从 LockRegistry 实例获取的锁来确保同一时间只有一个线程操作一个组。DefaultLockRegistry 在单个组件内执行此功能。现在,您可以在这些组件上配置外部锁注册表。当与共享的 MessageGroupStore 结合使用时,您可以使用 JdbcLockRegistry 在多个应用程序实例之间提供此功能,从而确保同一时间只有一个实例可以操作该组。
📄️ JDBC Metadata Store
版本 5.0 引入了 JDBC MetadataStore(参见元数据存储)实现。你可以使用 JdbcMetadataStore 在应用程序重启时维护元数据状态。此 MetadataStore 实现可与以下适配器配合使用: