Использование ConnectionFactory
Spring устанавливает соединение R2DBC с базой данных через ConnectionFactory
. ConnectionFactory
является частью спецификации R2DBC и представляет собой общую точку входа для драйверов. Он позволяет контейнеру или фреймворку скрывать проблемы объединения соединений в пул и управления транзакциями от кода приложения. Как разработчику, вам не требуется подробно знать о том, как подключиться к базе данных. За это отвечает администратор, который устанавливает ConnectionFactory
. Скорее всего, вы выполняете обе роли, поскольку разрабатываете и тестируете код, но вам не обязательно знать, как настроен производственный источник данных.
Если вы используете уровень R2DBC из Spring, то можете сконфигурировать свой собственный с помощью реализации пула соединений, предоставленной третьей стороной. Популярной реализацией является пул R2DBC (r2dbc-pool
). Реализации в дистрибутиве Spring предназначены только для целей тестирования и не обеспечивают объединение в пул.
Чтобы сконфигурировать ConnectionFactory
:
-
Установите соединение с
ConnectionFactory
так же, как вы обычно получаетеConnectionFactory
из R2DBC. -
Укажите URL-адрес R2DBC (правильное значение см. в документации к вашему драйверу).
В следующем примере показано, как сконфигурировать 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");
Использование ConnectionFactoryUtils
Класс ConnectionFactoryUtils
– это удобный и полнофункциональный вспомогательный класс, который предоставляет статические методы для установления соединений из ConnectionFactory
и закрытия соединений (при необходимости).
Он поддерживает подключения с привязкой к Context
подписчика, например, R2dbcTransactionManager
.
Использование SingleConnectionFactory
Класс SingleConnectionFactory
является реализацией интерфейса DelegatingConnectionFactory
, который оборачивает одно Connection
, не закрываемое после каждого использования.
Если какой-либо клиентский код вызывает close
, исходя из предположения, что существует пул соединений (как при использовании инструментов поддержки постоянного хранения данных), следует установить свойство suppressClose
в true
. Этот параметр возвращает прокси, подавляющий закрытие, который обертывает физическое соединение. Обратите внимание, что больше нельзя приводить его к нативному Connection
или подобному объекту.
SingleConnectionFactory
является в первую очередь тестовым классом и может быть использован для специфических требований, таких как конвейеризация, если ваш драйвер R2DBC допускает такое использование. В отличие от пула ConnectionFactory
, он позволяет повторно использовать одно и то же соединение все время, что позволяет избегать чрезмерного создания физических соединений.
Использование TransactionAwareConnectionFactoryProxy
TransactionAwareConnectionFactoryProxy
– это прокси для целевой ConnectionFactory
. Прокси обертывает эту целевую ConnectionFactory,
чтобы повысить уровень совместимости с транзакциями, управляемыми Spring.
ConnectionFactoryUtils
для управления ресурсами.Более подробную информацию смотрите в javadoc по TransactionAwareConnectionFactoryProxy
.
Использование R2dbcTransactionManager
Класс R2dbcTransactionManager
– это реализация ReactiveTransactionManager
для отдельных источников данных R2DBC. Он привязывает R2DBC-соединение от указанной фабрики соединений к Context
подписчика, потенциально допуская одно соединение подписчика для каждой фабрики соединений.
Код приложения необходим для получения R2DBC-соединения через ConnectionFactoryUtils.getConnection(ConnectionFactory)
вместо стандартного для R2DBC ConnectionFactory.create()
.
Все классы фреймворка (например, DatabaseClient
) используют эту стратегию неявно. Если стратегия поиска не используется с этим менеджером транзакций, то она ведет себя точно так же, как и обычная. Таким образом, в любом случае её можно использовать.
Класс R2dbcTransactionManager
поддерживает кастомные уровни изоляции, которые применяются к соединению.