Закрывает ли BoneCP (или любой другой пул) операторы соединения, когда соединение возвращается в пул?

StackOverflow https://stackoverflow.com/questions/4348814

  •  30-09-2019
  •  | 
  •  

Вопрос

Закрывает ли BoneCP (или любой другой пул) операторы соединения, когда соединение возвращается в пул?Насколько я понимаю, он не вызывает метод закрытия фактического соединения, поэтому автоматического закрытия оператора не происходит.Итак, закрывает ли он операторы каким-либо другим способом или мне нужно закрывать их вручную?

Это было полезно?

Решение

В спецификации JDBC очень неясно, что должно происходить при нормальном закрытии соединения, поэтому независимо от используемого пула вам следует всегда обязательно закройте операторы вручную.Подумайте, что произойдет с вашим приложением, если вы решите в будущем переключиться на другой пул, который не будет делать для вас то, что вы ожидаете.

Что касается BoneCP, ответ — нет, он не закроет ваши запросы, хотя его можно настроить на закрытие ваших соединений, если вы забудете.Это сделано из соображений производительности, поскольку некоторые драйверы JDBC закроют все еще активные операторы внутри себя, если вы закроете соединение.

Однако BoneCP закроет все кэшированные операторы, если у вас включено кэширование операторов.

РЕДАКТИРОВАТЬ:Начиная с версии 0.8.0, была добавлена ​​поддержка закрытия незакрытых операторов (+ распечатка трассировки стека места, где оператор был открыт, если хотите).

Другие советы

BoneCP (0.8.0 -RC3), есть 2 возможных результата,

Закрыть с некоторой конфигурацией для не кэшированного заявления только

не закрывается независимо от того, как вы настраиваете его для кэшированного заявления Даже вы вызовуте оператор .Close () прямо.

Существует класс emplationCace для кэширования подготовленногостатения и калабления. По умолчанию отключено. Вам нужен call bonecpconfig.setStatementsCachesize () с помощью параметра> 0, чтобы включить его. После включения кэша,

1 BoneCP.Statement.close () обойдут базовый отчет, если он кэшируется.

  public void close() throws SQLException {
      this.connectionHandle.untrackStatement(this);
  this.logicallyClosed.set(true);
  if (this.logStatementsEnabled){
        this.logParams.clear();
        this.batchSQL = new StringBuilder();
      }

      if (this.cache == null || !this.inCache){ // no cache = throw it away right now
           this.internalStatement.close();
  }
}

2 BoneCP.Connection.Close () просто просто очистит кеш через функцию «ClearStatementCaches ()»

Хорошие новости - это драйвер MySQL JDBC, разъем / j, закроет все открытые операторы при закрытии подключения через функцию «SkinealLopenstatements ()»

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top