|
如需使用最新稳定版本,请使用 Spring Integration 7.0.4! |
JDBC 元数据存储
版本 5.0 引入了 JDBC MetadataStore(参见元数据存储)实现。
您可以使用JdbcMetadataStore在应用程序重启之间维护元数据状态。
此MetadataStore实现可与以下适配器配合使用:
要配置这些适配器以使用 JdbcMetadataStore,请使用 bean 名称 metadataStore 声明一个 Spring bean。
Feed 入站通道适配器和 feed 入站通道适配器都会自动拾取并使用声明的 JdbcMetadataStore,如下例所示:
@Bean
public MetadataStore metadataStore(DataSource dataSource) {
return new JdbcMetadataStore(dataSource);
}
The org.springframework.integration.jdbc 包包含多个关系型数据库管理系统(RDBMS)厂商的数据库架构脚本。
例如,以下列表显示了元数据表的 H2 DDL:
CREATE TABLE INT_METADATA_STORE (
METADATA_KEY VARCHAR(255) NOT NULL,
METADATA_VALUE VARCHAR(4000),
REGION VARCHAR(100) NOT NULL,
constraint INT_METADATA_STORE_PK primary key (METADATA_KEY, REGION)
);
您可以将 INT_ 前缀更改为符合目标数据库设计要求的值。
您也可以配置 JdbcMetadataStore 以使用自定义前缀。
JdbcMetadataStore 实现了 ConcurrentMetadataStore,使其能够在多个应用程序实例之间可靠地共享,其中只有一个实例可以存储或修改键的值。
所有这些操作都是原子的,得益于事务保证。
事务管理必须使用 JdbcMetadataStore。
入站通道适配器可以在轮询配置中提供对 TransactionManager 的引用。
与非事务性的 MetadataStore 实现不同,使用 JdbcMetadataStore 时,条目仅在事务提交后才出现在目标表中。
当发生回滚时,不会向 INT_METADATA_STORE 表添加任何条目。
自 5.0.7 版本起,您可以使用 RDBMS 提供商特定的 lockHint 选项来配置元数据存储项的基于锁的查询中的 JdbcMetadataStore。
默认情况下,其值为 FOR UPDATE;如果目标数据库不支持行锁定功能,则可通过空字符串进行配置。
关于在更新前锁定行的具体提示,请参阅提供商提供的 SELECT 表达式文档。