Class JdbcMessageHandler
- All Implemented Interfaces:
org.reactivestreams.Subscriber<Message<?>>
,Aware
,BeanFactoryAware
,BeanNameAware
,DisposableBean
,InitializingBean
,ApplicationContextAware
,Ordered
,ExpressionCapable
,Orderable
,IntegrationPattern
,NamedComponent
,IntegrationManagement
,TrackableComponent
,MessageHandler
,reactor.core.CoreSubscriber<Message<?>>
SqlParameterSourceFactory
abstraction, the default implementation of which wraps the message so that its bean
properties can be referred to by name in the query string, e.g.
INSERT INTO ITEMS (MESSAGE_ID, PAYLOAD) VALUES (:headers[id], :payload)
When a message payload is an instance of Iterable
, a
NamedParameterJdbcOperations.batchUpdate(String, SqlParameterSource[])
is performed, where each
SqlParameterSource
instance is based on items wrapped into an internal Message
implementation with
headers from the request message. The item is wrapped only if it is not a Message
already.
When a preparedStatementSetter
is configured, it is applied for each item in the appropriate
JdbcOperations.batchUpdate(String, BatchPreparedStatementSetter)
function.
NOTE: The batch update is not supported when keysGenerated
is in use.
N.B. do not use quotes to escape the header keys. The default SQL parameter source (from Spring JDBC) can also handle
headers with dotted names (e.g. business.id
)
- Since:
- 2.0
- Author:
- Dave Syer, Artem Bilan, Trung Pham
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.springframework.integration.support.management.IntegrationManagement
IntegrationManagement.ManagementOverrides
-
Field Summary
Fields inherited from class org.springframework.integration.context.IntegrationObjectSupport
EXPRESSION_PARSER, logger
Fields inherited from interface org.springframework.integration.support.management.IntegrationManagement
METER_PREFIX, RECEIVE_COUNTER_NAME, SEND_TIMER_NAME
Fields inherited from interface org.springframework.core.Ordered
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
-
Constructor Summary
ConstructorDescriptionJdbcMessageHandler
(DataSource dataSource, String updateSql) Constructor takingDataSource
from which the DB Connection can be obtained and the select query to execute to retrieve new rows.JdbcMessageHandler
(JdbcOperations jdbcOperations, String updateSql) Constructor takingJdbcOperations
instance to use for query execution and the select query to execute to retrieve new rows. -
Method Summary
Modifier and TypeMethodDescriptionexecuteUpdateQuery
(Message<?> message, boolean keysGenerated) Execute an update for the provided message and generated keys flag.Subclasses may implement this method to provide component type information.protected void
handleMessageInternal
(Message<?> message) Executes the update, passing the message into theSqlParameterSourceFactory
.protected void
onInit()
Subclasses may implement this for initialization logic.void
setKeysGenerated
(boolean keysGenerated) Flag to indicate that the update query is an insert with auto-generated keys, which will be logged at debug level.void
setPreparedStatementSetter
(MessagePreparedStatementSetter preparedStatementSetter) Specify aMessagePreparedStatementSetter
to populate parameters on thePreparedStatement
with theMessage
context.void
setSqlParameterSourceFactory
(SqlParameterSourceFactory sqlParameterSourceFactory) Configure anSqlParameterSourceFactory
.Methods inherited from class org.springframework.integration.handler.AbstractMessageHandler
handleMessage, onComplete, onError, onNext, onSubscribe, setObservationConvention
Methods inherited from class org.springframework.integration.handler.MessageHandlerSupport
buildSendTimer, destroy, getIntegrationPatternType, getManagedName, getManagedType, getMetricsCaptor, getObservationRegistry, getOrder, getOverrides, isLoggingEnabled, isObserved, registerMetricsCaptor, registerObservationRegistry, sendTimer, setLoggingEnabled, setManagedName, setManagedType, setOrder, setShouldTrack, shouldTrack
Methods inherited from class org.springframework.integration.context.IntegrationObjectSupport
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
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface reactor.core.CoreSubscriber
currentContext
Methods inherited from interface org.springframework.integration.support.management.IntegrationManagement
getThisAs
Methods inherited from interface org.springframework.integration.support.context.NamedComponent
getBeanName, getComponentName
-
Constructor Details
-
JdbcMessageHandler
Constructor takingDataSource
from which the DB Connection can be obtained and the select query to execute to retrieve new rows.- Parameters:
dataSource
- Must not be nullupdateSql
- query to execute
-
JdbcMessageHandler
Constructor takingJdbcOperations
instance to use for query execution and the select query to execute to retrieve new rows.- Parameters:
jdbcOperations
- instance to use for query executionupdateSql
- query to execute
-
-
Method Details
-
setKeysGenerated
public void setKeysGenerated(boolean keysGenerated) Flag to indicate that the update query is an insert with auto-generated keys, which will be logged at debug level.- Parameters:
keysGenerated
- the flag value to set
-
setSqlParameterSourceFactory
Configure anSqlParameterSourceFactory
.- Parameters:
sqlParameterSourceFactory
- theSqlParameterSourceFactory
to use.
-
setPreparedStatementSetter
public void setPreparedStatementSetter(@Nullable MessagePreparedStatementSetter preparedStatementSetter) Specify aMessagePreparedStatementSetter
to populate parameters on thePreparedStatement
with theMessage
context.This is a low-level alternative to the
SqlParameterSourceFactory
.- Parameters:
preparedStatementSetter
- theMessagePreparedStatementSetter
to set.- Since:
- 4.2
-
getComponentType
Description copied from class:IntegrationObjectSupport
Subclasses may implement this method to provide component type information.- Specified by:
getComponentType
in interfaceNamedComponent
- Overrides:
getComponentType
in classMessageHandlerSupport
-
onInit
protected void onInit()Description copied from class:IntegrationObjectSupport
Subclasses may implement this for initialization logic.- Overrides:
onInit
in classIntegrationObjectSupport
-
handleMessageInternal
Executes the update, passing the message into theSqlParameterSourceFactory
.- Specified by:
handleMessageInternal
in classAbstractMessageHandler
-
executeUpdateQuery
protected List<? extends Map<String,Object>> executeUpdateQuery(Message<?> message, boolean keysGenerated) Execute an update for the provided message and generated keys flag.- Parameters:
message
- the message to use for update query params.keysGenerated
- generate key or not.- Returns:
- a generated keys for update.
-