Class JdbcMessageStore
java.lang.Object
org.springframework.integration.store.AbstractBatchingMessageGroupStore
org.springframework.integration.store.AbstractMessageGroupStore
org.springframework.integration.jdbc.store.JdbcMessageStore
- All Implemented Interfaces:
- Iterable<MessageGroup>,- Aware,- BeanClassLoaderAware,- BasicMessageGroupStore,- MessageGroupStore,- MessageStore
public class JdbcMessageStore
extends AbstractMessageGroupStore
implements MessageStore, BeanClassLoaderAware
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
- Author:
- Dave Syer, Oleg Zhurakousky, Matt Stine, Gunnar Hillert, Will Schipp, Gary Russell, Artem Bilan
- 
Nested Class SummaryNested classes/interfaces inherited from interface org.springframework.integration.store.MessageGroupStoreMessageGroupStore.MessageGroupCallback
- 
Field SummaryFieldsModifier and TypeFieldDescriptionstatic final StringDefault value for the table prefix property.Fields inherited from class org.springframework.integration.store.AbstractMessageGroupStorelogger
- 
Constructor SummaryConstructorsConstructorDescriptionJdbcMessageStore(DataSource dataSource) Create aMessageStorewith all mandatory properties.JdbcMessageStore(JdbcOperations jdbcOperations) Create aMessageStorewith all mandatory properties.
- 
Method SummaryModifier and TypeMethodDescriptionvoidaddAllowedPatterns(String... patterns) Add patterns for packages/classes that are allowed to be deserialized.<T> Message<T>addMessage(Message<T> message) Put the provided Message into the MessageStore.voidaddMessagesToGroup(Object groupId, Message<?>... messages) Store messages with an association to a group id.voidcompleteGroup(Object groupId) Completes this MessageGroup.protected Message<?>doPollForMessage(String groupIdKey) This method executes a call to the DB to get the oldest Message in the MessageGroup Override this method if need to.getGroupMetadata(Object groupId) Obtain the group metadata without fetching any messages; must supply all other group properties; may include the id of the first message.protected JdbcOperationsTo be used to get a reference to JdbcOperations in case this class is subclassed.Message<?>getMessage(UUID id) longOptional attribute giving the number of messages in the store.intOptional attribute giving the number of messages in the store over all groups.Message<?>getMessageFromGroup(Object groupId, UUID messageId) Retrieve aMessagefrom a group by id.getMessageGroup(Object groupId) Return all Messages currently in the MessageStore that were stored usingBasicMessageGroupStore.addMessageToGroup(Object, Message)with this group id.intOptional attribute giving the number of message groups.Collection<Message<?>>getMessagesForGroup(Object groupId) Retrieve messages for the provided group id.Message<?>getOneMessageFromGroup(Object groupId) Return the oneMessagefromMessageGroup.protected StringgetQuery(org.springframework.integration.jdbc.store.JdbcMessageStore.Query base) Replace patterns in the input to produce a valid SQL query.iterator()intmessageGroupSize(Object groupId) Return the size of this MessageGroup.Message<?>pollMessageFromGroup(Object groupId) Poll Message from thisMessageGroup(in FIFO style if supported by the implementation) while also removing the polledMessage.Message<?>removeMessage(UUID id) Remove the Message with the given id from the MessageStore, if present, and return it.booleanremoveMessageFromGroupById(Object groupId, UUID messageId) Deletion the message from the group.voidremoveMessageGroup(Object groupId) Remove the message group with this id.voidremoveMessagesFromGroup(Object groupId, Collection<Message<?>> messages) Persist the deletion of messages from the group.voidsetBeanClassLoader(ClassLoader classLoader) voidsetDeserializer(Deserializer<? extends Message<?>> deserializer) A converter for deserializing byte arrays to message.voidsetGroupCondition(Object groupId, String condition) Add a condition sentence into the group.voidsetLastReleasedSequenceNumberForGroup(Object groupId, int sequenceNumber) Allows you to set the sequence number of the last released Message.voidsetLobHandler(LobHandler lobHandler) Override theLobHandlerthat is used to create and unpack large objects in SQL queries.voidA unique grouping identifier for all messages persisted with this store.voidsetSerializer(Serializer<? super Message<?>> serializer) A converter for serializing messages to byte arrays for storage.voidsetTablePrefix(String tablePrefix) Public setter for the table prefix property.streamMessagesForGroup(Object groupId) Return a stream for messages stored in the provided group.Methods inherited from class org.springframework.integration.store.AbstractMessageGroupStoreaddMessageToGroup, copy, expireMessageGroups, getMessageGroupFactory, isTimeoutOnIdle, registerMessageGroupExpiryCallback, removeMessagesFromGroup, setExpiryCallbacks, setLazyLoadMessageGroups, setTimeoutOnIdleMethods inherited from class org.springframework.integration.store.AbstractBatchingMessageGroupStoregetRemoveBatchSize, setMessageGroupFactory, setRemoveBatchSizeMethods inherited from class java.lang.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface java.lang.IterableforEach, spliterator
- 
Field Details- 
DEFAULT_TABLE_PREFIXDefault value for the table prefix property.- See Also:
 
 
- 
- 
Constructor Details- 
JdbcMessageStoreCreate aMessageStorewith all mandatory properties.- Parameters:
- dataSource- a- DataSource
 
- 
JdbcMessageStoreCreate aMessageStorewith all mandatory properties.- Parameters:
- jdbcOperations- a- JdbcOperations
- Since:
- 4.3.9
 
 
- 
- 
Method Details- 
setBeanClassLoader- Specified by:
- setBeanClassLoaderin interface- BeanClassLoaderAware
 
- 
setTablePrefixPublic 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
 
- 
setRegionA 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
 
- 
setLobHandlerOverride 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- a- LobHandler
 
- 
setSerializerA converter for serializing messages to byte arrays for storage.- Parameters:
- serializer- the serializer to set
 
- 
setDeserializerA converter for deserializing byte arrays to message.- Parameters:
- deserializer- the deserializer to set
 
- 
addAllowedPatternsAdd 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
 
- 
removeMessageDescription copied from interface:MessageStoreRemove the Message with the given id from the MessageStore, if present, and return it. If no Message with that id is present in the store, this will returnnull. If this method is implemented on aMessageGroupStore, the message is removed from the store only if no groups holding this message.- Specified by:
- removeMessagein interface- MessageStore
- Parameters:
- id- the message identifier.
- Returns:
- the message (if any).
 
- 
getMessageCountDescription copied from interface:MessageStoreOptional attribute giving the number of messages in the store. Implementations may decline to respond by throwing an exception.- Specified by:
- getMessageCountin interface- MessageStore
- Returns:
- The number of messages.
 
- 
getMessage- Specified by:
- getMessagein interface- MessageStore
- Parameters:
- id- The message identifier.
- Returns:
- The Message with the given id, or null if no Message with that id exists in the MessageStore.
 
- 
getMessageMetadataDescription copied from interface:MessageStore- Specified by:
- getMessageMetadatain interface- MessageStore
- Parameters:
- id- The message identifier.
- Returns:
- The MessageMetadata with the given id, or null if no Message with that id exists in the MessageStore or the message has no metadata (legacy message from an earlier version).
 
- 
addMessageDescription copied from interface:MessageStorePut the provided Message into the MessageStore. The store may need to mutate the message internally, and if it does then the return value can be different than the input. The id of the return value will be used as an index so that theMessageStore.getMessage(UUID)andMessageStore.removeMessage(UUID)behave properly. Since messages are immutable, putting the same message more than once is a no-op.- Specified by:
- addMessagein interface- MessageStore
- Type Parameters:
- T- The payload type.
- Parameters:
- message- The message.
- Returns:
- The message that was stored.
 
- 
addMessagesToGroupDescription copied from interface:MessageGroupStoreStore messages with an association to a group id. This can be used to group messages together.- Specified by:
- addMessagesToGroupin interface- MessageGroupStore
- Parameters:
- groupId- The group id to store messages under.
- messages- The messages to add.
 
- 
getMessageGroupCountDescription copied from interface:MessageGroupStoreOptional attribute giving the number of message groups. Implementations may decline to respond by throwing an exception.- Specified by:
- getMessageGroupCountin interface- MessageGroupStore
- Overrides:
- getMessageGroupCountin class- AbstractMessageGroupStore
- Returns:
- the number message groups
 
- 
getMessageCountForAllMessageGroupsDescription copied from interface:MessageGroupStoreOptional attribute giving the number of messages in the store over all groups. Implementations may decline to respond by throwing an exception.- Specified by:
- getMessageCountForAllMessageGroupsin interface- MessageGroupStore
- Overrides:
- getMessageCountForAllMessageGroupsin class- AbstractMessageGroupStore
- Returns:
- the number of messages
 
- 
messageGroupSizeDescription copied from interface:BasicMessageGroupStoreReturn the size of this MessageGroup.- Specified by:
- messageGroupSizein interface- BasicMessageGroupStore
- Parameters:
- groupId- The group identifier.
- Returns:
- The size.
 
- 
getMessageGroupDescription copied from interface:BasicMessageGroupStoreReturn all Messages currently in the MessageStore that were stored usingBasicMessageGroupStore.addMessageToGroup(Object, Message)with this group id.- Specified by:
- getMessageGroupin interface- BasicMessageGroupStore
- Parameters:
- groupId- The group identifier.
- Returns:
- A group of messages, empty if none exists for this key.
 
- 
getGroupMetadataDescription copied from interface:MessageGroupStoreObtain the group metadata without fetching any messages; must supply all other group properties; may include the id of the first message.- Specified by:
- getGroupMetadatain interface- MessageGroupStore
- Overrides:
- getGroupMetadatain class- AbstractMessageGroupStore
- Parameters:
- groupId- The group id.
- Returns:
- The metadata.
 
- 
removeMessagesFromGroupDescription copied from interface:MessageGroupStorePersist the deletion of messages from the group.- Specified by:
- removeMessagesFromGroupin interface- MessageGroupStore
- Parameters:
- groupId- The groupId for the group containing the message(s).
- messages- The messages to be removed.
 
- 
getMessageFromGroupDescription copied from interface:MessageGroupStoreRetrieve aMessagefrom a group by id. Returnnullif message does not belong to the requested group.- Specified by:
- getMessageFromGroupin interface- MessageGroupStore
- Parameters:
- groupId- The groupId for the group containing the message.
- messageId- The message id.
- Returns:
- message by id if it belongs to requested group.
 
- 
removeMessageFromGroupByIdDescription copied from interface:MessageGroupStoreDeletion the message from the group.- Specified by:
- removeMessageFromGroupByIdin interface- MessageGroupStore
- Parameters:
- groupId- The groupId for the group containing the message.
- messageId- The message id to be removed.
- Returns:
- true if message has been removed.
 
- 
removeMessageGroupDescription copied from interface:BasicMessageGroupStoreRemove the message group with this id.- Specified by:
- removeMessageGroupin interface- BasicMessageGroupStore
- Parameters:
- groupId- The id of the group to remove.
 
- 
completeGroupDescription copied from interface:MessageGroupStoreCompletes this MessageGroup. Completion of the MessageGroup generally means that this group should not be allowing anymore mutating operation to be performed on it. For example any attempt to add/remove new Message form the group should not be allowed.- Specified by:
- completeGroupin interface- MessageGroupStore
- Parameters:
- groupId- The group identifier.
 
- 
setGroupConditionDescription copied from interface:MessageGroupStoreAdd a condition sentence into the group. Can be used later on for making some decisions for group, e.g. release strategy for correlation handler can consult this condition instead of iterating all the messages in group.- Specified by:
- setGroupConditionin interface- MessageGroupStore
- Parameters:
- groupId- The group identifier.
- condition- The condition to store into the group.
 
- 
setLastReleasedSequenceNumberForGroupDescription copied from interface:MessageGroupStoreAllows you to set the sequence number of the last released Message. Used for Resequencing use cases- Specified by:
- setLastReleasedSequenceNumberForGroupin interface- MessageGroupStore
- Parameters:
- groupId- The group identifier.
- sequenceNumber- The sequence number.
 
- 
pollMessageFromGroupDescription copied from interface:BasicMessageGroupStorePoll Message from thisMessageGroup(in FIFO style if supported by the implementation) while also removing the polledMessage.- Specified by:
- pollMessageFromGroupin interface- BasicMessageGroupStore
- Parameters:
- groupId- The group identifier.
- Returns:
- The message.
 
- 
getOneMessageFromGroupDescription copied from interface:MessageGroupStoreReturn the oneMessagefromMessageGroup.- Specified by:
- getOneMessageFromGroupin interface- MessageGroupStore
- Parameters:
- groupId- The group identifier.
- Returns:
- the Message.
 
- 
getMessagesForGroupDescription copied from interface:MessageGroupStoreRetrieve messages for the provided group id.- Specified by:
- getMessagesForGroupin interface- MessageGroupStore
- Parameters:
- groupId- The group id to retrieve messages for.
- Returns:
- the messages for group.
 
- 
streamMessagesForGroupDescription copied from interface:MessageGroupStoreReturn a stream for messages stored in the provided group. The persistent implementations return a Stream which has to be closed once fully processed (e.g. through a try-with-resources clause). By default, it streams a result ofMessageGroupStore.getMessagesForGroup(Object).- Specified by:
- streamMessagesForGroupin interface- MessageGroupStore
- Parameters:
- groupId- the group id to retrieve messages.
- Returns:
- the Streamfor messages in this group.
 
- 
iterator- Specified by:
- iteratorin interface- Iterable<MessageGroup>
- Specified by:
- iteratorin interface- MessageGroupStore
- Returns:
- The iterator of currently accumulated MessageGroups.
 
- 
getQueryReplace 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
 
- 
getJdbcOperationsTo be used to get a reference to JdbcOperations in case this class is subclassed.- Returns:
- the JdbcOperations implementation
 
- 
doPollForMessageThis 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
 
 
-