Використання 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
підтримує кастомні рівні ізоляції, які застосовуються до з'єднання.