Quarkus Agroal — как правильно автоматически закрывать соединения?
Я переносил старое стандартное приложение jee на quarkus, и одна из вещей, которую я пока не мог понять, это как правильно настроить расширение agroal для автоматического закрытия его виртуальных соединений.
До quarkus у меня был код репозитория, похожий на этот
@TransactionScoped
public class Repository {
@Resource(mappedName = "java:jboss/datasources/MyDS")
private DataSource dataSource;
private Connection connection;
@PostConstruct
public void open() {
try {
this.connection = dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
throw new WebApplicationException(e.getMessage());
}
}
@PreDestroy
public void close() {
if (this.connection == null) return;
try {
if (!this.connection.isClosed()) {
this.connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
throw new WebApplicationException(e.getMessage());
}
}
}
Поэтому всякий раз, когда мой bean-компонент с областью транзакции заканчивал свой жизненный цикл, мое соединение с базой данных автоматически уничтожалось. Это было очень полезно, так как мне никогда не понадобится вручную обрабатывать соединения.
Но теперь этот подход не очень хорошо работает с Quarkus, потому что ни
@PreDestroy
ловушка не вызывается, и расширение базы данных не перестает жаловаться на эти незакрытые виртуальные соединения. Я постоянно получаю следующие сообщения:
Datasource '<default>': Closing open connection prior to commit
Итак, наконец, мой вопрос: как правильно настроить agroal, чтобы он автоматически закрывал свои виртуальные соединения без каких-либо жалоб?