public class RedisStoreWritingMessageHandler extends AbstractMessageHandler
MessageHandler
which writes
Message data into a Redis store identified by a key String
.
It supports the collection types identified by RedisCollectionFactoryBean.CollectionType
.
It supports batch updates or single item entry.
"Batch updates" means that the payload of the Message may be a Map or Collection. With
such a payload, individual items from it are added to the corresponding Redis store.
See handleMessageInternal(Message)
for more details.
You can instead choose to persist such a payload as a single item if the
extractPayloadElements
property is set to false (default is true).IntegrationManagement.ManagementOverrides
EXPRESSION_PARSER, logger
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
METER_PREFIX, RECEIVE_COUNTER_NAME, SEND_TIMER_NAME
Constructor and Description |
---|
RedisStoreWritingMessageHandler(RedisConnectionFactory connectionFactory)
Constructs an instance using the provided
RedisConnectionFactory . |
RedisStoreWritingMessageHandler(RedisTemplate<String,?> redisTemplate)
Constructs an instance using the provided
RedisTemplate . |
Modifier and Type | Method and Description |
---|---|
String |
getComponentType()
Subclasses may implement this method to provide component type information.
|
protected void |
handleMessageInternal(Message<?> message)
Will extract the payload from the Message and store it in the collection identified by the
key (which may be determined by an expression).
|
protected void |
onInit()
Subclasses may implement this for initialization logic.
|
void |
setCollectionType(RedisCollectionFactoryBean.CollectionType collectionType)
Sets the collection type for this handler as per
RedisCollectionFactoryBean.CollectionType . |
void |
setExtractPayloadElements(boolean extractPayloadElements)
Sets the flag signifying that if the payload is a "multivalue" (i.e., Collection or Map),
it should be saved using addAll/putAll semantics.
|
void |
setKey(String key)
Specifies the key for the Redis store.
|
void |
setKeyExpression(Expression keyExpression)
Specifies a SpEL Expression to be used to determine the key for the Redis store.
|
void |
setKeyExpressionString(String keyExpression)
Specifies a SpEL Expression to be used to determine the key for the Redis store.
|
void |
setMapKeyExpression(Expression mapKeyExpression)
Sets the expression used as the key for Map and Properties entries.
|
void |
setMapKeyExpressionString(String mapKeyExpression)
Sets the expression used as the key for Map and Properties entries.
|
void |
setZsetIncrementExpression(Expression zsetIncrementScoreExpression)
Set the expression used as the INCR flag for the ZADD command in case of ZSet collection.
|
void |
setZsetIncrementExpressionString(String zsetIncrementScoreExpression)
Set the expression used as the INCR flag for the ZADD command in case of ZSet collection.
|
handleMessage, onComplete, onError, onNext, onSubscribe
buildSendTimer, destroy, getIntegrationPatternType, getManagedName, getManagedType, getMetricsCaptor, getOrder, getOverrides, isLoggingEnabled, registerMetricsCaptor, sendTimer, setLoggingEnabled, setManagedName, setManagedType, setOrder, setShouldTrack, shouldTrack
afterPropertiesSet, extractTypeIfPossible, generateId, getApplicationContext, getApplicationContextId, getBeanDescription, getBeanFactory, getBeanName, getChannelResolver, getComponentName, getConversionService, getExpression, getIntegrationProperties, getIntegrationProperty, getMessageBuilderFactory, getTaskScheduler, isInitialized, setApplicationContext, setBeanFactory, setBeanName, setChannelResolver, setComponentName, setConversionService, setMessageBuilderFactory, setPrimaryExpression, setTaskScheduler, toString
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
getThisAs
getBeanName, getComponentName
public RedisStoreWritingMessageHandler(RedisTemplate<String,?> redisTemplate)
RedisTemplate
.
The RedisTemplate must be fully initialized.redisTemplate
- The Redis template.public RedisStoreWritingMessageHandler(RedisConnectionFactory connectionFactory)
RedisConnectionFactory
.
It will use either a StringRedisTemplate
if extractPayloadElements
is
true (default) or a RedisTemplate
with StringRedisSerializer
s for
keys and hash keys and
JdkSerializationRedisSerializer
s
for values and
hash values, when it is false.connectionFactory
- The connection factory.setExtractPayloadElements(boolean)
public void setKey(String key)
setKeyExpression(Expression)
instead of this method (they are mutually exclusive).
If neither setter is called, the default expression will be 'headers.RedisHeaders.KEY
'.key
- The key.setKeyExpression(org.springframework.expression.Expression)
public void setKeyExpressionString(String keyExpression)
setKey(String)
method instead of this one (they are mutually exclusive).
If neither setter is called, the default expression will be 'headers.RedisHeaders.KEY
'.keyExpression
- The key expression.setKey(String)
public void setKeyExpression(Expression keyExpression)
setKey(String)
method instead of this one (they are mutually exclusive).
If neither setter is called, the default expression will be 'headers.RedisHeaders.KEY
'.keyExpression
- The key expression.setKey(String)
public void setCollectionType(RedisCollectionFactoryBean.CollectionType collectionType)
RedisCollectionFactoryBean.CollectionType
.collectionType
- The collection type.public void setExtractPayloadElements(boolean extractPayloadElements)
extractPayloadElements
- true if payload elements should be extracted.public void setMapKeyExpressionString(String mapKeyExpression)
RedisHeaders.MAP_KEY
'mapKeyExpression
- The map key expression.public void setMapKeyExpression(Expression mapKeyExpression)
RedisHeaders.MAP_KEY
'mapKeyExpression
- The map key expression.public void setZsetIncrementExpressionString(String zsetIncrementScoreExpression)
RedisHeaders.ZSET_INCREMENT_SCORE
'zsetIncrementScoreExpression
- The ZADD INCR flag expression.public void setZsetIncrementExpression(Expression zsetIncrementScoreExpression)
RedisHeaders.ZSET_INCREMENT_SCORE
'zsetIncrementScoreExpression
- The ZADD INCR flag expression.public String getComponentType()
IntegrationObjectSupport
getComponentType
in interface NamedComponent
getComponentType
in class MessageHandlerSupport
protected void onInit()
IntegrationObjectSupport
onInit
in class IntegrationObjectSupport
protected void handleMessageInternal(Message<?> message)
collectionType
property. The default CollectionType is LIST.
The rules for storing the payload are:
LIST/SET
If the payload is of type Collection and extractPayloadElements
is 'true' (default),
the payload will be added using the addAll() method. If extractPayloadElements
is set to 'false', then regardless of the payload type, the payload will be added using add().
ZSET
In addition to the rules described for LIST/SET, ZSET allows 'score' information
to be provided. The score can be provided using the RedisHeaders.ZSET_SCORE
message header
when the payload is not a Map, or by sending a Map as the payload where each Map 'key' is a
value to be saved and each corresponding Map 'value' is the score assigned to it.
If extractPayloadElements
is set to 'false' the map will be stored as a single entry.
If the 'score' can not be determined, the default value (1) will be used.
MAP/PROPERTIES
You can also add items to a Map or Properties based store.
If the payload itself is of type Map or Properties, it can be stored either as a batch or single
item following the same rules as described above for other collection types.
If the payload itself needs to be stored as a value of the map/property then the map key
must be specified via the mapKeyExpression (default RedisHeaders.MAP_KEY
Message header).
handleMessageInternal
in class AbstractMessageHandler