JDBC メタデータストア
バージョン 5.0 は、JDBC MetadataStore (メタデータストアを参照)実装を導入しました。JdbcMetadataStore を使用して、アプリケーションの再起動後もメタデータの状態を維持できます。この MetadataStore 実装は、次のようなアダプターで使用できます。
これらのアダプターを構成して JdbcMetadataStore を使用するには、Bean の名前 metadataStore を使用して Spring Bean を宣言します。次の例に示すように、フィード受信チャネルアダプターとフィード受信チャネルアダプターは両方とも、宣言された 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 を実装し、複数のアプリケーションインスタンス間で確実に共有できるようにします。1 つのインスタンスのみがキーの値を保存または変更できます。トランザクションの保証により、これらの操作はすべてアトミックです。
トランザクション管理では JdbcMetadataStore を使用する必要があります。受信チャネルアダプターには、ポーラー構成の TransactionManager への参照を提供できます。JdbcMetadataStore を使用した非トランザクション MetadataStore 実装とは異なり、エントリは、トランザクションがコミットされた後にのみターゲットテーブルに表示されます。ロールバックが発生すると、INT_METADATA_STORE テーブルにエントリは追加されません。
バージョン 5.0.7 以降、メタデータストアエントリのロックベースのクエリ用に RDBMS ベンダー固有の lockHint オプションを使用して JdbcMetadataStore を構成できます。デフォルトでは、FOR UPDATE であり、ターゲットデータベースが行ロック機能をサポートしていない場合は、空の文字列で構成できます。更新前に行をロックするための SELECT 式の特定の可能なヒントについては、ベンダーに相談してください。