Class JdbcMetadataStore

java.lang.Object
org.springframework.integration.jdbc.metadata.JdbcMetadataStore
All Implemented Interfaces:
InitializingBean, Lifecycle, Phased, SmartLifecycle, ConcurrentMetadataStore, MetadataStore

public class JdbcMetadataStore extends Object implements ConcurrentMetadataStore, InitializingBean, SmartLifecycle
Implementation of ConcurrentMetadataStore using a relational database via JDBC. SQL scripts to create the necessary tables are packaged as org/springframework/integration/jdbc/schema-*.sql, where * is the target database type.

The transaction management is required to use this ConcurrentMetadataStore.

This class implements SmartLifecycle and calls SELECT COUNT(METADATA_KEY) FROM %sMETADATA_STORE query according to the provided prefix on start() to check if required table is present in DB. The application context will fail to start if the table is not present. This check can be disabled via setCheckDatabaseOnStart(boolean).

Since:
5.0
Author:
Bojan Vukasovic, Artem Bilan, Gary Russell
  • Field Details

    • DEFAULT_TABLE_PREFIX

      public static final String DEFAULT_TABLE_PREFIX
      Default value for the table prefix property.
      See Also:
  • Constructor Details

  • Method Details

    • setTablePrefix

      public void setTablePrefix(String tablePrefix)
      Public setter for the table prefix property. This will be prefixed to all the table names before queries are executed. Defaults to DEFAULT_TABLE_PREFIX.
      Parameters:
      tablePrefix - the tablePrefix to set
    • setRegion

      public void setRegion(String region)
      A unique grouping identifier for all messages persisted with this store. Using multiple regions allows the store to be partitioned (if necessary) for different purposes. Defaults to DEFAULT.
      Parameters:
      region - the region name to set
    • setLockHint

      public void setLockHint(String lockHint)
      Specify a row lock hint for the query in the lock-based operations. Defaults to FOR UPDATE. Can be specified as an empty string, if the target RDBMS doesn't support locking on tables from queries. The value depends on the RDBMS vendor, e.g. SQL Server requires WITH (ROWLOCK).
      Parameters:
      lockHint - the RDBMS vendor-specific lock hint.
      Since:
      5.0.7
    • afterPropertiesSet

      public void afterPropertiesSet()
      Specified by:
      afterPropertiesSet in interface InitializingBean
    • setCheckDatabaseOnStart

      public void setCheckDatabaseOnStart(boolean checkDatabaseOnStart)
      The flag to perform a database check query on start or not.
      Parameters:
      checkDatabaseOnStart - false to not perform the database check.
      Since:
      6.2
    • isAutoStartup

      public boolean isAutoStartup()
      Specified by:
      isAutoStartup in interface SmartLifecycle
    • start

      public void start()
      Specified by:
      start in interface Lifecycle
    • stop

      public void stop()
      Specified by:
      stop in interface Lifecycle
    • isRunning

      public boolean isRunning()
      Specified by:
      isRunning in interface Lifecycle
    • putIfAbsent

      @Transactional public String putIfAbsent(String key, String value)
      Description copied from interface: ConcurrentMetadataStore
      Atomically insert the key into the store.
      Specified by:
      putIfAbsent in interface ConcurrentMetadataStore
      Parameters:
      key - The key.
      value - The value.
      Returns:
      null if successful, the old value otherwise.
    • replace

      @Transactional public boolean replace(String key, String oldValue, String newValue)
      Description copied from interface: ConcurrentMetadataStore
      Atomically replace the value for the key in the store if the old value matches the oldValue argument.
      Specified by:
      replace in interface ConcurrentMetadataStore
      Parameters:
      key - The key.
      oldValue - The old value.
      newValue - The new value.
      Returns:
      true if successful.
    • put

      @Transactional public void put(String key, String value)
      Description copied from interface: MetadataStore
      Writes a key value pair to this MetadataStore.
      Specified by:
      put in interface MetadataStore
      Parameters:
      key - The key.
      value - The value.
    • get

      @Transactional public String get(String key)
      Description copied from interface: MetadataStore
      Reads a value for the given key from this MetadataStore.
      Specified by:
      get in interface MetadataStore
      Parameters:
      key - The key.
      Returns:
      The value.
    • remove

      @Transactional public String remove(String key)
      Description copied from interface: MetadataStore
      Remove a value for the given key from this MetadataStore.
      Specified by:
      remove in interface MetadataStore
      Parameters:
      key - The key.
      Returns:
      The previous value associated with key, or null if there was no mapping for key.