Class R2dbcMessageSource
java.lang.Object
org.springframework.integration.util.AbstractExpressionEvaluator
org.springframework.integration.endpoint.AbstractMessageSource<org.reactivestreams.Publisher<?>>
org.springframework.integration.r2dbc.inbound.R2dbcMessageSource
- All Implemented Interfaces:
Aware
,BeanFactoryAware
,BeanNameAware
,DisposableBean
,InitializingBean
,MessageSource<org.reactivestreams.Publisher<?>>
,IntegrationPattern
,NamedComponent
,IntegrationInboundManagement
,IntegrationManagement
public class R2dbcMessageSource extends AbstractMessageSource<org.reactivestreams.Publisher<?>>
An instance of
MessageSource
which returns
a Message
with a payload which is the result of
execution of query. When expectSingleResult
is false (default), the R2DBC
query is executed returning a Flux
.
The returned Flux
will be used as the payload of the
Message
returned by the AbstractMessageSource.receive()
method.
When expectSingleResult
is true, the query is executed returning a Mono
for the single object returned from the query.
- Since:
- 5.4
- Author:
- Rohan Mukesh, Artem Bilan
-
Nested Class Summary
Nested Classes Modifier and Type Class Description class
R2dbcMessageSource.SelectCreator
An instance of this class is used as a root object for query expression to give a limited access only to theStatementMapper.createSelect(java.lang.String)
fluent API.Nested classes/interfaces inherited from interface org.springframework.integration.support.management.IntegrationManagement
IntegrationManagement.ManagementOverrides
-
Field Summary
Fields inherited from class org.springframework.integration.util.AbstractExpressionEvaluator
EXPRESSION_PARSER, logger
Fields inherited from interface org.springframework.integration.support.management.IntegrationManagement
METER_PREFIX, RECEIVE_COUNTER_NAME, SEND_TIMER_NAME
-
Constructor Summary
Constructors Constructor Description R2dbcMessageSource(org.springframework.data.r2dbc.core.R2dbcEntityOperations r2dbcEntityOperations, String query)
Create an instance with the providedR2dbcEntityOperations
and SpEL expression which should resolve to a Relational 'query' string.R2dbcMessageSource(org.springframework.data.r2dbc.core.R2dbcEntityOperations r2dbcEntityOperations, Expression queryExpression)
Create an instance with the providedR2dbcEntityOperations
and SpEL expression which should resolve to a query string orStatementMapper.SelectSpec
instance. -
Method Summary
Modifier and Type Method Description protected Object
doReceive()
Execute a query returning its results as the Message payload.String
getComponentType()
protected void
onInit()
void
setBindFunction(BiFunction<DatabaseClient.GenericExecuteSpec,?,DatabaseClient.GenericExecuteSpec> bindFunction)
Set aBiFunction
which is used to bind parameters into the update query.void
setExpectSingleResult(boolean expectSingleResult)
The flag to manage which find* method to invoke onR2dbcEntityOperations
.void
setPayloadType(Class<?> payloadType)
Set the type of the entityClass which is used for theEntityRowMapper
.void
setUpdateSql(String updateSql)
Set an update query that will be passed to theDatabaseClient.sql(String)
method.Methods inherited from class org.springframework.integration.endpoint.AbstractMessageSource
buildMessage, destroy, getBeanName, getComponentName, getManagedName, getManagedType, getOverrides, isLoggingEnabled, receive, registerMetricsCaptor, setBeanName, setHeaderExpressions, setLoggingEnabled, setManagedName, setManagedType
Methods inherited from class org.springframework.integration.util.AbstractExpressionEvaluator
afterPropertiesSet, evaluateExpression, evaluateExpression, evaluateExpression, evaluateExpression, evaluateExpression, evaluateExpression, evaluateExpression, getBeanFactory, getEvaluationContext, getEvaluationContext, getMessageBuilderFactory, setBeanFactory, setConversionService
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.springframework.integration.support.management.IntegrationManagement
getThisAs
Methods inherited from interface org.springframework.integration.core.MessageSource
getIntegrationPatternType
-
Constructor Details
-
R2dbcMessageSource
public R2dbcMessageSource(org.springframework.data.r2dbc.core.R2dbcEntityOperations r2dbcEntityOperations, String query)Create an instance with the providedR2dbcEntityOperations
and SpEL expression which should resolve to a Relational 'query' string. It assumes that theR2dbcEntityOperations
is fully initialized and ready to be used. The 'query' will be evaluated on every call to theAbstractMessageSource.receive()
method.- Parameters:
r2dbcEntityOperations
- The reactive database client for performing database calls.query
- The query String.
-
R2dbcMessageSource
public R2dbcMessageSource(org.springframework.data.r2dbc.core.R2dbcEntityOperations r2dbcEntityOperations, Expression queryExpression)Create an instance with the providedR2dbcEntityOperations
and SpEL expression which should resolve to a query string orStatementMapper.SelectSpec
instance. It assumes that theR2dbcEntityOperations
is fully initialized and ready to be used. The 'queryExpression' will be evaluated on every call to theAbstractMessageSource.receive()
method.- Parameters:
r2dbcEntityOperations
- The reactive for performing database calls.queryExpression
- The query expression. The root object for evaluation context is aR2dbcMessageSource.SelectCreator
for delegation int theStatementMapper.createSelect(java.lang.String)
fluent API.
-
-
Method Details
-
setPayloadType
Set the type of the entityClass which is used for theEntityRowMapper
.- Parameters:
payloadType
- The class to use.
-
setUpdateSql
Set an update query that will be passed to theDatabaseClient.sql(String)
method.- Parameters:
updateSql
- the update query string.
-
setBindFunction
public void setBindFunction(BiFunction<DatabaseClient.GenericExecuteSpec,?,DatabaseClient.GenericExecuteSpec> bindFunction)Set aBiFunction
which is used to bind parameters into the update query.- Parameters:
bindFunction
- theBiFunction
to use.
-
setExpectSingleResult
public void setExpectSingleResult(boolean expectSingleResult)The flag to manage which find* method to invoke onR2dbcEntityOperations
. Default is 'false', which means theAbstractMessageSource.receive()
method will use theDatabaseClient.sql(String)
method and will fetch all. If set to 'true'AbstractMessageSource.receive()
will useDatabaseClient.sql(String)
and will fetch one and the payload of the returnedMessage
will be the returned target Object of type identified bypayloadType
instead of a List.- Parameters:
expectSingleResult
- true if a single result is expected.
-
getComponentType
-
onInit
protected void onInit()- Overrides:
onInit
in classAbstractExpressionEvaluator
-
doReceive
Execute a query returning its results as the Message payload. The payload can be eitherFlux
orMono
of objects of type identified bypayloadType
, or a single element of type identified bypayloadType
based on the value ofexpectSingleResult
attribute which defaults to 'false' resultingMessage
with payload of typeFlux
.- Specified by:
doReceive
in classAbstractMessageSource<org.reactivestreams.Publisher<?>>
- Returns:
- The value returned.
-