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);
}
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)
);
您可以更改 INT_
前缀以匹配目标数据库设计要求。您还可以配置 JdbcMetadataStore
以使用自定义前缀。
JdbcMetadataStore
实现 ConcurrentMetadataStore
,使其能够可靠地跨多个应用程序实例共享,其中只有一个实例可以存储或修改键的值。由于事务保证,所有这些操作都是原子的。
必须使用事务管理 JdbcMetadataStore
。可以在轮询器配置中为入站通道适配器提供对 TransactionManager
的引用。与非事务性 MetadataStore
实现不同,对于 JdbcMetadataStore
,只有在事务提交后,条目才会出现在目标表中。发生回滚时,不会向 INT_METADATA_STORE
表中添加任何条目。
从 5.0.7 版本开始,您可以使用特定于 RDBMS 供应商的 lockHint
选项配置 JdbcMetadataStore
,以便对元数据存储条目进行基于锁的查询。默认情况下,它是 FOR UPDATE
,如果目标数据库不支持行锁定功能,则可以使用空字符串进行配置。请咨询您的供应商以了解在 SELECT
表达式中用于在更新前锁定行的特定提示和可能的提示。