对于最新的稳定版本,请使用 Spring Integration 6.4.3spring-doc.cadn.net.cn

JDBC 元数据存储

版本 5.0 引入了 JDBCMetadataStore(请参阅 元数据存储) 实现。 您可以使用JdbcMetadataStore在应用程序重启时保持元数据状态。 这MetadataStoreimplementation 可以与适配器一起使用,例如:spring-doc.cadn.net.cn

要将这些适配器配置为使用JdbcMetadataStore中,使用 Bean 名称metadataStore. Feed 入站通道适配器和 Feed 入站通道适配器都会自动获取并使用声明的JdbcMetadataStore,如下例所示:spring-doc.cadn.net.cn

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

org.springframework.integration.jdbc包包含多个 RDMBS 供应商的数据库架构脚本。 例如,下面的清单显示了元数据表的 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在 Poller 配置中。 与非事务性MetadataStoreimplementations, 使用JdbcMetadataStore,则只有在事务提交后,该条目才会显示在目标表中。 发生回滚时,不会向INT_METADATA_STORE桌子。spring-doc.cadn.net.cn

从版本 5.0.7 开始,您可以配置JdbcMetadataStore使用 RDBMS 供应商特定的lockHint对元数据存储条目进行基于锁的查询的选项。 默认情况下,它是FOR UPDATE如果目标数据库不支持行锁定功能,则可以使用空字符串进行配置。 请咨询您的供应商,以获取SELECTexpression 在更新之前锁定行。spring-doc.cadn.net.cn