Class JdbcMessageStore

java.lang.Object
org.springframework.integration.store.AbstractBatchingMessageGroupStore
org.springframework.integration.store.AbstractMessageGroupStore
org.springframework.integration.jdbc.store.JdbcMessageStore
All Implemented Interfaces:
java.lang.Iterable<org.springframework.integration.store.MessageGroup>, org.springframework.integration.store.BasicMessageGroupStore, org.springframework.integration.store.MessageGroupStore, org.springframework.integration.store.MessageStore

public class JdbcMessageStore
extends org.springframework.integration.store.AbstractMessageGroupStore
implements org.springframework.integration.store.MessageStore
Implementation of MessageStore 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.

If you intend backing a MessageChannel using a JDBC-based Message Store, please consider using the channel-specific JdbcChannelMessageStore instead. This implementation is intended for correlation components (e.g. <aggregator>), <delayer> and similar.

Since:
2.0
  • Nested Class Summary

    Nested classes/interfaces inherited from interface org.springframework.integration.store.MessageGroupStore

    org.springframework.integration.store.MessageGroupStore.MessageGroupCallback
  • Field Summary

    Fields 
    Modifier and Type Field Description
    static java.lang.String DEFAULT_TABLE_PREFIX
    Default value for the table prefix property.

    Fields inherited from class org.springframework.integration.store.AbstractMessageGroupStore

    logger
  • Constructor Summary

    Constructors 
    Constructor Description
    JdbcMessageStore​(javax.sql.DataSource dataSource)
    Create a MessageStore with all mandatory properties.
    JdbcMessageStore​(org.springframework.jdbc.core.JdbcOperations jdbcOperations)
    Create a MessageStore with all mandatory properties.
  • Method Summary

    Modifier and Type Method Description
    void addAllowedPatterns​(java.lang.String... patterns)
    Add patterns for packages/classes that are allowed to be deserialized.
    <T> org.springframework.messaging.Message<T> addMessage​(org.springframework.messaging.Message<T> message)  
    void addMessagesToGroup​(java.lang.Object groupId, org.springframework.messaging.Message<?>... messages)  
    void completeGroup​(java.lang.Object groupId)  
    protected org.springframework.messaging.Message<?> doPollForMessage​(java.lang.String groupIdKey)
    This method executes a call to the DB to get the oldest Message in the MessageGroup Override this method if need to.
    protected org.springframework.jdbc.core.JdbcOperations getJdbcOperations()
    To be used to get a reference to JdbcOperations in case this class is subclassed
    org.springframework.messaging.Message<?> getMessage​(java.util.UUID id)  
    long getMessageCount()  
    int getMessageCountForAllMessageGroups()  
    org.springframework.integration.store.MessageGroup getMessageGroup​(java.lang.Object groupId)  
    int getMessageGroupCount()  
    org.springframework.integration.store.MessageMetadata getMessageMetadata​(java.util.UUID id)  
    java.util.Collection<org.springframework.messaging.Message<?>> getMessagesForGroup​(java.lang.Object groupId)  
    org.springframework.messaging.Message<?> getOneMessageFromGroup​(java.lang.Object groupId)  
    protected java.lang.String getQuery​(org.springframework.integration.jdbc.store.JdbcMessageStore.Query base)
    Replace patterns in the input to produce a valid SQL query.
    java.util.Iterator<org.springframework.integration.store.MessageGroup> iterator()  
    int messageGroupSize​(java.lang.Object groupId)  
    org.springframework.messaging.Message<?> pollMessageFromGroup​(java.lang.Object groupId)  
    org.springframework.messaging.Message<?> removeMessage​(java.util.UUID id)  
    void removeMessageGroup​(java.lang.Object groupId)  
    void removeMessagesFromGroup​(java.lang.Object groupId, java.util.Collection<org.springframework.messaging.Message<?>> messages)  
    void setDeserializer​(org.springframework.core.serializer.Deserializer<? extends org.springframework.messaging.Message<?>> deserializer)
    A converter for deserializing byte arrays to messages.
    void setLastReleasedSequenceNumberForGroup​(java.lang.Object groupId, int sequenceNumber)  
    void setLobHandler​(org.springframework.jdbc.support.lob.LobHandler lobHandler)
    Override the LobHandler that is used to create and unpack large objects in SQL queries.
    void setRegion​(java.lang.String region)
    A unique grouping identifier for all messages persisted with this store.
    void setSerializer​(org.springframework.core.serializer.Serializer<? super org.springframework.messaging.Message<?>> serializer)
    A converter for serializing messages to byte arrays for storage.
    void setTablePrefix​(java.lang.String tablePrefix)
    Public setter for the table prefix property.
    java.util.stream.Stream<org.springframework.messaging.Message<?>> streamMessagesForGroup​(java.lang.Object groupId)  

    Methods inherited from class org.springframework.integration.store.AbstractMessageGroupStore

    addMessageToGroup, copy, expireMessageGroups, getGroupMetadata, getMessageGroupFactory, isTimeoutOnIdle, registerMessageGroupExpiryCallback, removeMessagesFromGroup, setExpiryCallbacks, setLazyLoadMessageGroups, setTimeoutOnIdle

    Methods inherited from class org.springframework.integration.store.AbstractBatchingMessageGroupStore

    getRemoveBatchSize, setMessageGroupFactory, setRemoveBatchSize

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface java.lang.Iterable

    forEach, spliterator
  • Field Details

  • Constructor Details

    • JdbcMessageStore

      public JdbcMessageStore​(javax.sql.DataSource dataSource)
      Create a MessageStore with all mandatory properties.
      Parameters:
      dataSource - a DataSource
    • JdbcMessageStore

      public JdbcMessageStore​(org.springframework.jdbc.core.JdbcOperations jdbcOperations)
      Create a MessageStore with all mandatory properties.
      Parameters:
      jdbcOperations - a JdbcOperations
      Since:
      4.3.9
  • Method Details

    • setTablePrefix

      public void setTablePrefix​(java.lang.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​(java.lang.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
    • setLobHandler

      public void setLobHandler​(org.springframework.jdbc.support.lob.LobHandler lobHandler)
      Override the LobHandler that is used to create and unpack large objects in SQL queries. The default is fine for almost all platforms, but some Oracle drivers require a native implementation.
      Parameters:
      lobHandler - a LobHandler
    • setSerializer

      public void setSerializer​(org.springframework.core.serializer.Serializer<? super org.springframework.messaging.Message<?>> serializer)
      A converter for serializing messages to byte arrays for storage.
      Parameters:
      serializer - the serializer to set
    • setDeserializer

      public void setDeserializer​(org.springframework.core.serializer.Deserializer<? extends org.springframework.messaging.Message<?>> deserializer)
      A converter for deserializing byte arrays to messages.
      Parameters:
      deserializer - the deserializer to set
    • addAllowedPatterns

      public void addAllowedPatterns​(java.lang.String... patterns)
      Add patterns for packages/classes that are allowed to be deserialized. A class can be fully qualified or a wildcard '*' is allowed at the beginning or end of the class name. Examples: com.foo.*, *.MyClass.
      Parameters:
      patterns - the patterns.
      Since:
      5.4
    • removeMessage

      public org.springframework.messaging.Message<?> removeMessage​(java.util.UUID id)
      Specified by:
      removeMessage in interface org.springframework.integration.store.MessageStore
    • getMessageCount

      @ManagedAttribute public long getMessageCount()
      Specified by:
      getMessageCount in interface org.springframework.integration.store.MessageStore
    • getMessage

      public org.springframework.messaging.Message<?> getMessage​(java.util.UUID id)
      Specified by:
      getMessage in interface org.springframework.integration.store.MessageStore
    • getMessageMetadata

      public org.springframework.integration.store.MessageMetadata getMessageMetadata​(java.util.UUID id)
      Specified by:
      getMessageMetadata in interface org.springframework.integration.store.MessageStore
    • addMessage

      public <T> org.springframework.messaging.Message<T> addMessage​(org.springframework.messaging.Message<T> message)
      Specified by:
      addMessage in interface org.springframework.integration.store.MessageStore
    • addMessagesToGroup

      public void addMessagesToGroup​(java.lang.Object groupId, org.springframework.messaging.Message<?>... messages)
      Specified by:
      addMessagesToGroup in interface org.springframework.integration.store.MessageGroupStore
    • getMessageGroupCount

      @ManagedAttribute public int getMessageGroupCount()
      Specified by:
      getMessageGroupCount in interface org.springframework.integration.store.MessageGroupStore
      Overrides:
      getMessageGroupCount in class org.springframework.integration.store.AbstractMessageGroupStore
    • getMessageCountForAllMessageGroups

      @ManagedAttribute public int getMessageCountForAllMessageGroups()
      Specified by:
      getMessageCountForAllMessageGroups in interface org.springframework.integration.store.MessageGroupStore
      Overrides:
      getMessageCountForAllMessageGroups in class org.springframework.integration.store.AbstractMessageGroupStore
    • messageGroupSize

      @ManagedAttribute public int messageGroupSize​(java.lang.Object groupId)
      Specified by:
      messageGroupSize in interface org.springframework.integration.store.BasicMessageGroupStore
    • getMessageGroup

      public org.springframework.integration.store.MessageGroup getMessageGroup​(java.lang.Object groupId)
      Specified by:
      getMessageGroup in interface org.springframework.integration.store.BasicMessageGroupStore
    • removeMessagesFromGroup

      public void removeMessagesFromGroup​(java.lang.Object groupId, java.util.Collection<org.springframework.messaging.Message<?>> messages)
      Specified by:
      removeMessagesFromGroup in interface org.springframework.integration.store.MessageGroupStore
    • removeMessageGroup

      public void removeMessageGroup​(java.lang.Object groupId)
      Specified by:
      removeMessageGroup in interface org.springframework.integration.store.BasicMessageGroupStore
    • completeGroup

      public void completeGroup​(java.lang.Object groupId)
      Specified by:
      completeGroup in interface org.springframework.integration.store.MessageGroupStore
    • setLastReleasedSequenceNumberForGroup

      public void setLastReleasedSequenceNumberForGroup​(java.lang.Object groupId, int sequenceNumber)
      Specified by:
      setLastReleasedSequenceNumberForGroup in interface org.springframework.integration.store.MessageGroupStore
    • pollMessageFromGroup

      public org.springframework.messaging.Message<?> pollMessageFromGroup​(java.lang.Object groupId)
      Specified by:
      pollMessageFromGroup in interface org.springframework.integration.store.BasicMessageGroupStore
    • getOneMessageFromGroup

      public org.springframework.messaging.Message<?> getOneMessageFromGroup​(java.lang.Object groupId)
      Specified by:
      getOneMessageFromGroup in interface org.springframework.integration.store.MessageGroupStore
    • getMessagesForGroup

      public java.util.Collection<org.springframework.messaging.Message<?>> getMessagesForGroup​(java.lang.Object groupId)
      Specified by:
      getMessagesForGroup in interface org.springframework.integration.store.MessageGroupStore
    • streamMessagesForGroup

      public java.util.stream.Stream<org.springframework.messaging.Message<?>> streamMessagesForGroup​(java.lang.Object groupId)
      Specified by:
      streamMessagesForGroup in interface org.springframework.integration.store.MessageGroupStore
    • iterator

      public java.util.Iterator<org.springframework.integration.store.MessageGroup> iterator()
      Specified by:
      iterator in interface java.lang.Iterable<org.springframework.integration.store.MessageGroup>
      Specified by:
      iterator in interface org.springframework.integration.store.MessageGroupStore
    • getQuery

      protected java.lang.String getQuery​(org.springframework.integration.jdbc.store.JdbcMessageStore.Query base)
      Replace patterns in the input to produce a valid SQL query. This implementation lazily initializes a simple map-based cache, only replacing the table prefix on the first access to a named query. Further accesses will be resolved from the cache.
      Parameters:
      base - the SQL query to be transformed
      Returns:
      a transformed query with replacements
    • getJdbcOperations

      protected org.springframework.jdbc.core.JdbcOperations getJdbcOperations()
      To be used to get a reference to JdbcOperations in case this class is subclassed
      Returns:
      the JdbcOperations implementation
    • doPollForMessage

      protected org.springframework.messaging.Message<?> doPollForMessage​(java.lang.String groupIdKey)
      This method executes a call to the DB to get the oldest Message in the MessageGroup Override this method if need to. For example if your DB supports advanced function such as FIRST etc.
      Parameters:
      groupIdKey - String representation of message group ID
      Returns:
      a message; could be null if query produced no Messages