Spring + R2DBC: как закрыть DatabaseClient и TransactionalOperator?
Я могу создать DatabaseClient и TransactionalOperator в своем приложении Spring Boot, используя:
@Autowired public App(ConnectionFactory factory) {
DatabaseClient dc = DatabaseClient.create(factory);
TransactionalOperator to = TransactionalOperator.create(new R2dbcTransactionManager(factory));
}
Но как мне закрыть DatabaseClient и TransactionalOperator и освободить соединения / ресурсы?
Это лучший способ создать соединение с базой данных для R2DBC в приложении Spring Boot?
0 ответов
TL;DR: нечего закрывать, если вы не используете пул соединений.
Spring Data R2DBC's DatabaseClient
выделяет соединение для каждой вызванной операции. Это похоже наJdbcTemplate
это просит его DataSource
создать Connection
для каждого вызываемого вами метода. После завершения вызова метода он освобождает (закрывает) соединение.
То же самое касается DatabaseClient
. После завершения операции основное соединение закрывается.
Когда используешь TransactionalOperator
или @Transactional
есть небольшое изменение в поведении, но похоже на JDBC: соединения R2DBC привязываются во время активной транзакции к самой транзакции, которая делает DatabaseClient
для повторного использования того же соединения до завершения транзакции. После завершения транзакции связанное соединение освобождается.