JDBC Metadata Store

5.0 版本引入了 JDBC MetadataStore (請參閱 Metadata Store) 實作。您可以使用 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。輸入通道適配器可以在 poller 設定中提供對 TransactionManager 的參考。與非交易式 MetadataStore 實作不同,使用 JdbcMetadataStore 時,項目僅在交易提交後才會出現在目標表中。發生回滾時,不會將任何項目新增至 INT_METADATA_STORE 表。

自 5.0.7 版本起,您可以為 JdbcMetadataStore 設定 RDBMS 供應商特定的 lockHint 選項,以針對中繼資料儲存項目進行基於鎖定的查詢。預設情況下,它是 FOR UPDATE,如果目標資料庫不支援資料列鎖定功能,則可以設定為空字串。請諮詢您的供應商,以取得在 SELECT 運算式中用於在更新前鎖定資料列的特定且可能的提示。