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для повторного использования того же соединения до завершения транзакции. После завершения транзакции связанное соединение освобождается.

Другие вопросы по тегам