跳到主要内容

JDBC 元数据存储

QWen Plus 中英对照 JDBC Metadata Store

版本 5.0 引入了 JDBC MetadataStore(请参阅 元数据存储)。您可以使用 JdbcMetadataStore 在应用程序重启之间维护元数据状态。此 MetadataStore 实现可以与以下适配器一起使用:

要配置这些适配器以使用 JdbcMetadataStore,请声明一个名为 metadataStore 的 Spring bean。Feed 输入通道适配器和 feed 输入通道适配器都会自动检测并使用声明的 JdbcMetadataStore,如下例所示:

@Bean
public MetadataStore metadataStore(DataSource dataSource) {
return new JdbcMetadataStore(dataSource);
}
java

org.springframework.integration.jdbc 包为多个 RDMBS 供应商提供了数据库模式脚本。例如,以下列表显示了 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)
);
sql

你可以将 INT_ 前缀更改为匹配目标数据库设计要求。你也可以配置 JdbcMetadataStore 使用自定义前缀。

JdbcMetadataStore 实现了 ConcurrentMetadataStore,让它可以可靠地在多个应用程序实例之间共享,其中只有一个实例可以存储或修改键的值。所有这些操作都是原子性的,这要归功于事务保证。

事务管理必须使用 JdbcMetadataStore。入站通道适配器可以在轮询配置中提供对 TransactionManager 的引用。与非事务性 MetadataStore 实现不同,使用 JdbcMetadataStore 时,条目只有在事务提交后才会出现在目标表中。当回滚发生时,不会向 INT_METADATA_STORE 表添加任何条目。

从 5.0.7 版本开始,您可以使用 RDBMS 厂商特定的 lockHint 选项配置 JdbcMetadataStore,以对元数据存储条目进行基于锁的查询。默认情况下,它是 FOR UPDATE,如果目标数据库不支持行锁定功能,则可以将其配置为空字符串。在更新之前锁定行时,请咨询您的厂商以获取 SELECT 表达式中特定和可能的提示。