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
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringDEFAULT_TABLE_PREFIXDefault value for the table prefix property. -
Constructor Summary
Constructors Constructor Description JdbcMessageStore(javax.sql.DataSource dataSource)Create aMessageStorewith all mandatory properties.JdbcMessageStore(org.springframework.jdbc.core.JdbcOperations jdbcOperations)Create aMessageStorewith all mandatory properties. -
Method Summary
Modifier and Type Method Description voidaddAllowedPatterns(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)voidaddMessagesToGroup(java.lang.Object groupId, org.springframework.messaging.Message<?>... messages)voidcompleteGroup(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.JdbcOperationsgetJdbcOperations()To be used to get a reference to JdbcOperations in case this class is subclassedorg.springframework.messaging.Message<?>getMessage(java.util.UUID id)longgetMessageCount()intgetMessageCountForAllMessageGroups()org.springframework.integration.store.MessageGroupgetMessageGroup(java.lang.Object groupId)intgetMessageGroupCount()org.springframework.integration.store.MessageMetadatagetMessageMetadata(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.StringgetQuery(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()intmessageGroupSize(java.lang.Object groupId)org.springframework.messaging.Message<?>pollMessageFromGroup(java.lang.Object groupId)org.springframework.messaging.Message<?>removeMessage(java.util.UUID id)voidremoveMessageGroup(java.lang.Object groupId)voidremoveMessagesFromGroup(java.lang.Object groupId, java.util.Collection<org.springframework.messaging.Message<?>> messages)voidsetDeserializer(org.springframework.core.serializer.Deserializer<? extends org.springframework.messaging.Message<?>> deserializer)A converter for deserializing byte arrays to messages.voidsetLastReleasedSequenceNumberForGroup(java.lang.Object groupId, int sequenceNumber)voidsetLobHandler(org.springframework.jdbc.support.lob.LobHandler lobHandler)Override theLobHandlerthat is used to create and unpack large objects in SQL queries.voidsetRegion(java.lang.String region)A unique grouping identifier for all messages persisted with this store.voidsetSerializer(org.springframework.core.serializer.Serializer<? super org.springframework.messaging.Message<?>> serializer)A converter for serializing messages to byte arrays for storage.voidsetTablePrefix(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, setTimeoutOnIdleMethods inherited from class org.springframework.integration.store.AbstractBatchingMessageGroupStore
getRemoveBatchSize, setMessageGroupFactory, setRemoveBatchSize
-
Field Details
-
DEFAULT_TABLE_PREFIX
public static final java.lang.String DEFAULT_TABLE_PREFIXDefault value for the table prefix property.- See Also:
- Constant Field Values
-
-
Constructor Details
-
JdbcMessageStore
public JdbcMessageStore(javax.sql.DataSource dataSource)Create aMessageStorewith all mandatory properties.- Parameters:
dataSource- aDataSource
-
JdbcMessageStore
public JdbcMessageStore(org.springframework.jdbc.core.JdbcOperations jdbcOperations)Create aMessageStorewith all mandatory properties.- Parameters:
jdbcOperations- aJdbcOperations- 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 toDEFAULT_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 toDEFAULT.- Parameters:
region- the region name to set
-
setLobHandler
public void setLobHandler(org.springframework.jdbc.support.lob.LobHandler lobHandler)Override theLobHandlerthat 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- aLobHandler
-
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:
removeMessagein interfaceorg.springframework.integration.store.MessageStore
-
getMessageCount
@ManagedAttribute public long getMessageCount()- Specified by:
getMessageCountin interfaceorg.springframework.integration.store.MessageStore
-
getMessage
public org.springframework.messaging.Message<?> getMessage(java.util.UUID id)- Specified by:
getMessagein interfaceorg.springframework.integration.store.MessageStore
-
getMessageMetadata
public org.springframework.integration.store.MessageMetadata getMessageMetadata(java.util.UUID id)- Specified by:
getMessageMetadatain interfaceorg.springframework.integration.store.MessageStore
-
addMessage
public <T> org.springframework.messaging.Message<T> addMessage(org.springframework.messaging.Message<T> message)- Specified by:
addMessagein interfaceorg.springframework.integration.store.MessageStore
-
addMessagesToGroup
public void addMessagesToGroup(java.lang.Object groupId, org.springframework.messaging.Message<?>... messages)- Specified by:
addMessagesToGroupin interfaceorg.springframework.integration.store.MessageGroupStore
-
getMessageGroupCount
@ManagedAttribute public int getMessageGroupCount()- Specified by:
getMessageGroupCountin interfaceorg.springframework.integration.store.MessageGroupStore- Overrides:
getMessageGroupCountin classorg.springframework.integration.store.AbstractMessageGroupStore
-
getMessageCountForAllMessageGroups
@ManagedAttribute public int getMessageCountForAllMessageGroups()- Specified by:
getMessageCountForAllMessageGroupsin interfaceorg.springframework.integration.store.MessageGroupStore- Overrides:
getMessageCountForAllMessageGroupsin classorg.springframework.integration.store.AbstractMessageGroupStore
-
messageGroupSize
@ManagedAttribute public int messageGroupSize(java.lang.Object groupId)- Specified by:
messageGroupSizein interfaceorg.springframework.integration.store.BasicMessageGroupStore
-
getMessageGroup
public org.springframework.integration.store.MessageGroup getMessageGroup(java.lang.Object groupId)- Specified by:
getMessageGroupin interfaceorg.springframework.integration.store.BasicMessageGroupStore
-
removeMessagesFromGroup
public void removeMessagesFromGroup(java.lang.Object groupId, java.util.Collection<org.springframework.messaging.Message<?>> messages)- Specified by:
removeMessagesFromGroupin interfaceorg.springframework.integration.store.MessageGroupStore
-
removeMessageGroup
public void removeMessageGroup(java.lang.Object groupId)- Specified by:
removeMessageGroupin interfaceorg.springframework.integration.store.BasicMessageGroupStore
-
completeGroup
public void completeGroup(java.lang.Object groupId)- Specified by:
completeGroupin interfaceorg.springframework.integration.store.MessageGroupStore
-
setLastReleasedSequenceNumberForGroup
public void setLastReleasedSequenceNumberForGroup(java.lang.Object groupId, int sequenceNumber)- Specified by:
setLastReleasedSequenceNumberForGroupin interfaceorg.springframework.integration.store.MessageGroupStore
-
pollMessageFromGroup
public org.springframework.messaging.Message<?> pollMessageFromGroup(java.lang.Object groupId)- Specified by:
pollMessageFromGroupin interfaceorg.springframework.integration.store.BasicMessageGroupStore
-
getOneMessageFromGroup
public org.springframework.messaging.Message<?> getOneMessageFromGroup(java.lang.Object groupId)- Specified by:
getOneMessageFromGroupin interfaceorg.springframework.integration.store.MessageGroupStore
-
getMessagesForGroup
public java.util.Collection<org.springframework.messaging.Message<?>> getMessagesForGroup(java.lang.Object groupId)- Specified by:
getMessagesForGroupin interfaceorg.springframework.integration.store.MessageGroupStore
-
streamMessagesForGroup
public java.util.stream.Stream<org.springframework.messaging.Message<?>> streamMessagesForGroup(java.lang.Object groupId)- Specified by:
streamMessagesForGroupin interfaceorg.springframework.integration.store.MessageGroupStore
-
iterator
public java.util.Iterator<org.springframework.integration.store.MessageGroup> iterator()- Specified by:
iteratorin interfacejava.lang.Iterable<org.springframework.integration.store.MessageGroup>- Specified by:
iteratorin interfaceorg.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
-