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, чтобы он автоматически закрывал свои виртуальные соединения без каких-либо жалоб?

0 ответов

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