JDBC 元資料儲存

版本 5.0 引入了 JDBC MetadataStore(參見 元資料儲存)實現。您可以使用 JdbcMetadataStore 來維護跨應用重啟的元資料狀態。這個 MetadataStore 實現可以與以下介面卡一起使用:

要配置這些介面卡使用 JdbcMetadataStore,請宣告一個 Spring bean,其 bean 名稱為 metadataStore。Feed 入站通道介面卡和 Feed 入站通道介面卡都會自動檢測並使用已宣告的 JdbcMetadataStore,如下例所示:

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

org.springframework.integration.jdbc 包包含針對多種 RDMBS 廠商的資料庫 schema 指令碼。例如,以下列表顯示了元資料表的 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 起,您可以為 JdbcMetadataStore 配置特定於 RDMBS 廠商的 lockHint 選項,用於對元資料儲存條目進行基於鎖的查詢。預設情況下,它是 FOR UPDATE,如果目標資料庫不支援行鎖定功能,則可以配置為空字串。請諮詢您的廠商,瞭解在 SELECT 表示式中鎖定行(更新前)的特定和可能的提示。