如需使用最新稳定版本,请使用 Spring Integration 7.0.4spring-doc.cadn.net.cn

JDBC 元数据存储

版本 5.0 引入了 JDBC MetadataStore(参见元数据存储)实现。 您可以使用JdbcMetadataStore在应用程序重启之间维护元数据状态。 此MetadataStore实现可与以下适配器配合使用:spring-doc.cadn.net.cn

要配置这些适配器以使用 JdbcMetadataStore,请使用 bean 名称 metadataStore 声明一个 Spring bean。 Feed 入站通道适配器和 feed 入站通道适配器都会自动拾取并使用声明的 JdbcMetadataStore,如下例所示:spring-doc.cadn.net.cn

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

The org.springframework.integration.jdbc 包包含多个关系型数据库管理系统(RDBMS)厂商的数据库架构脚本。 例如,以下列表显示了元数据表的 H2 DDL:spring-doc.cadn.net.cn

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 以使用自定义前缀。spring-doc.cadn.net.cn

JdbcMetadataStore 实现了 ConcurrentMetadataStore,使其能够在多个应用程序实例之间可靠地共享,其中只有一个实例可以存储或修改键的值。 所有这些操作都是原子的,得益于事务保证。spring-doc.cadn.net.cn

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

自 5.0.7 版本起,您可以使用 RDBMS 提供商特定的 lockHint 选项来配置元数据存储项的基于锁的查询中的 JdbcMetadataStore。 默认情况下,其值为 FOR UPDATE;如果目标数据库不支持行锁定功能,则可通过空字符串进行配置。 关于在更新前锁定行的具体提示,请参阅提供商提供的 SELECT 表达式文档。spring-doc.cadn.net.cn