Usando ConnectionFactory
Spring establece una conexión R2DBC a la base de datos a través de ConnectionFactory
. ConnectionFactory
es parte de la especificación R2DBC y proporciona un punto de entrada común para los controladores. Permite que el
contenedor o marco oculte los problemas de agrupación de conexiones y gestión de transacciones del código de la
aplicación. Como desarrollador, no necesita saber en detalle cómo conectarse a una base de datos. Esto es
responsabilidad del administrador que instala ConnectionFactory
. Probablemente desempeñes ambos roles a
medida que desarrollas y pruebas el código, pero no necesariamente necesitas saber cómo está configurada la fuente
de datos de producción.
Si está utilizando la capa R2DBC de Spring, puede configurar la suya propia utilizando una implementación de
agrupación de conexiones proporcionada por un tercero. Una implementación popular es el grupo R2DBC (r2dbc-pool
).
Las implementaciones en la distribución Spring son solo para fines de prueba y no proporcionan agrupación.
Para configurar ConnectionFactory
:
-
Establezca una conexión con
ConnectionFactory
de la misma manera que normalmente obtendría unaConnectionFactory
de R2DBC. -
Especifique la URL de R2DBC (consulte la documentación del controlador para conocer el valor correcto).
El siguiente ejemplo muestra cómo configurar ConnectionFactory
:
ConnectionFactory factory = ConnectionFactories.get("r2dbc:h2:mem:///test?options=DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE");
val factory = ConnectionFactories.get("r2dbc:h2:mem:///test?options=DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE");
Usando ConnectionFactoryUtils
La clase ConnectionFactoryUtils
es una clase auxiliar conveniente y con todas las funciones que
proporciona métodos estáticos para establecer conexiones desde ConnectionFactory
y cerrar conexiones
(si es necesario).
Admite conexiones vinculadas al Context
del suscriptor, como R2dbcTransactionManager
.
Usando SingleConnectionFactory
La clase SingleConnectionFactory
es una implementación de la interfaz
DelegatingConnectionFactory
que envuelve una única Connection
que no se cierra después de
cada uso.
Si algún código de cliente llama a close
bajo el supuesto de que existe un grupo de conexiones (como
cuando se utilizan herramientas de soporte de persistencia), debe establecer la propiedad suppressClose
en true
. Este parámetro devuelve un proxy que suprime los cierres que envuelven la conexión
física. Tenga en cuenta que ya no puede transmitirlo a una Connection
nativa ni a un objeto similar.
SingleConnectionFactory
es principalmente una clase de prueba y puede usarse para requisitos
específicos, como canalización, si su controlador R2DBC permite dicho uso. A diferencia de un grupo ConnectionFactory
,
le permite reutilizar la misma conexión todo el tiempo, lo que evita la creación excesiva de conexiones físicas.
Usando TransactionAwareConnectionFactoryProxy
TransactionAwareConnectionFactoryProxy
es un proxy para la ConnectionFactory
de destino. El
proxy envuelve este destino ConnectionFactory
para mejorar la compatibilidad con las transacciones
administradas por Spring.
ConnectionFactoryUtils
para la gestión de recursos.
Para obtener más información, consulte el javadoc en TransactionAwareConnectionFactoryProxy
.
Usando R2dbcTransactionManager
La Clase R2dbcTransactionManager
es una implementación de ReactiveTransactionManager
para
fuentes de datos R2DBC individuales. Vincula una conexión R2DBC desde la fábrica de conexiones especificada al
Context
del suscriptor, permitiendo potencialmente una conexión de suscriptor por fábrica de
conexiones.
Se requiere código de aplicación para obtener una conexión R2DBC a través de ConnectionFactoryUtils.getConnection(ConnectionFactory)
en lugar del estándar R2DBC ConnectionFactory.create()
.
Todas las clases de marco (por ejemplo, DatabaseClient
) utilizan esta estrategia implícitamente. Si la
estrategia de búsqueda no se utiliza con este administrador de transacciones, se comporta exactamente igual que uno
normal. Por lo tanto, se puede utilizar en cualquier caso.
La clase R2dbcTransactionManager
admite niveles de aislamiento personalizados que se aplican a la
conexión.