Class ConnectionFactoryUtils
ConnectionFactory
.
Used internally by Spring's DatabaseClient
, Spring's R2DBC operation
objects. Can also be used directly in application code.
- Since:
- 5.3
- Author:
- Mark Paluch, Christoph Strobl
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionstatic final int
Order value for ReactiveTransactionSynchronization objects that clean up R2DBC Connections. -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionstatic DataAccessException
convertR2dbcException
(String task, String sql, R2dbcException ex) Translate the givenR2dbcException
into a genericDataAccessException
.static reactor.core.publisher.Mono<ConnectionFactory>
currentConnectionFactory
(ConnectionFactory connectionFactory) Obtain theConnectionFactory
from the currentTransactionSynchronizationManager
.static reactor.core.publisher.Mono<Connection>
doGetConnection
(ConnectionFactory connectionFactory) Actually obtain a R2DBC Connection from the givenConnectionFactory
.static reactor.core.publisher.Mono<Void>
doReleaseConnection
(Connection connection, ConnectionFactory connectionFactory) Actually close the givenConnection
, obtained from the givenConnectionFactory
.static reactor.core.publisher.Mono<Connection>
getConnection
(ConnectionFactory connectionFactory) Obtain aConnection
from the givenConnectionFactory
.static Connection
Return the innermost targetConnection
of the givenConnection
.static reactor.core.publisher.Mono<Void>
releaseConnection
(Connection con, ConnectionFactory connectionFactory) Close the givenConnection
, obtained from the givenConnectionFactory
, if it is not managed externally (that is, not bound to the subscription).
-
Field Details
-
CONNECTION_SYNCHRONIZATION_ORDER
public static final int CONNECTION_SYNCHRONIZATION_ORDEROrder value for ReactiveTransactionSynchronization objects that clean up R2DBC Connections.- See Also:
-
-
Constructor Details
-
ConnectionFactoryUtils
public ConnectionFactoryUtils()
-
-
Method Details
-
getConnection
public static reactor.core.publisher.Mono<Connection> getConnection(ConnectionFactory connectionFactory) Obtain aConnection
from the givenConnectionFactory
. Translates exceptions into the Spring hierarchy of unchecked generic data access exceptions, simplifying calling code and making any exception that is thrown more meaningful.Is aware of a corresponding Connection bound to the current
TransactionSynchronizationManager
. Will bind a Connection to theTransactionSynchronizationManager
if transaction synchronization is active.- Parameters:
connectionFactory
- theConnectionFactory
to obtainConnections
from- Returns:
- a R2DBC Connection from the given
ConnectionFactory
- Throws:
DataAccessResourceFailureException
- if the attempt to get aConnection
failed- See Also:
-
doGetConnection
public static reactor.core.publisher.Mono<Connection> doGetConnection(ConnectionFactory connectionFactory) Actually obtain a R2DBC Connection from the givenConnectionFactory
. Same asgetConnection(io.r2dbc.spi.ConnectionFactory)
, but preserving the original exceptions.Is aware of a corresponding Connection bound to the current
TransactionSynchronizationManager
. Will bind a Connection to theTransactionSynchronizationManager
if transaction synchronization is active- Parameters:
connectionFactory
- theConnectionFactory
to obtain Connections from- Returns:
- a R2DBC
Connection
from the givenConnectionFactory
.
-
releaseConnection
public static reactor.core.publisher.Mono<Void> releaseConnection(Connection con, ConnectionFactory connectionFactory) Close the givenConnection
, obtained from the givenConnectionFactory
, if it is not managed externally (that is, not bound to the subscription).- Parameters:
con
- theConnection
to close if necessaryconnectionFactory
- theConnectionFactory
that the Connection was obtained from- See Also:
-
doReleaseConnection
public static reactor.core.publisher.Mono<Void> doReleaseConnection(Connection connection, ConnectionFactory connectionFactory) Actually close the givenConnection
, obtained from the givenConnectionFactory
. Same asreleaseConnection(io.r2dbc.spi.Connection, io.r2dbc.spi.ConnectionFactory)
, but preserving the original exception.- Parameters:
connection
- theConnection
to close if necessaryconnectionFactory
- theConnectionFactory
that the Connection was obtained from- See Also:
-
currentConnectionFactory
public static reactor.core.publisher.Mono<ConnectionFactory> currentConnectionFactory(ConnectionFactory connectionFactory) Obtain theConnectionFactory
from the currentTransactionSynchronizationManager
.- Parameters:
connectionFactory
- theConnectionFactory
that the Connection was obtained from- See Also:
-
convertR2dbcException
public static DataAccessException convertR2dbcException(String task, @Nullable String sql, R2dbcException ex) Translate the givenR2dbcException
into a genericDataAccessException
.The returned DataAccessException is supposed to contain the original
R2dbcException
as root cause. However, client code may not generally rely on this due to DataAccessExceptions possibly being caused by other resource APIs as well. That said, agetRootCause() instanceof R2dbcException
check (and subsequent cast) is considered reliable when expecting R2DBC-based access to have happened.- Parameters:
task
- readable text describing the task being attemptedsql
- the SQL query or update that caused the problem (if known)ex
- the offendingR2dbcException
- Returns:
- the corresponding DataAccessException instance
-
getTargetConnection
Return the innermost targetConnection
of the givenConnection
. If the givenConnection
is wrapped, it will be unwrapped until a plainConnection
is found. Otherwise, the passed-in Connection will be returned as-is.- Parameters:
con
- theConnection
wrapper to unwrap- Returns:
- the innermost target Connection, or the passed-in one if not wrapped
- See Also:
-