Объединение соединения JDBC с помощью C3P0

Я только что начал использовать CruiseControl.NET.

Без предшествующего knowlege я смог разбудить его и работающий с единственным тестовым проектом с помощью MSBuild, MSTest и Сервера Основы Команды (т.е. CodePlex) через несколько часов. Я отправил набор ссылок на полезные ресурсы здесь 2008-дневный 0 Devsta: Управление исходным кодом и CI

, которому я не могу помочь на объеме потребляемой памяти как свой проект, были довольно маленькими. Я могу сказать Вам, что, в то время как это ничего не делает (т.е. большую часть времени) это использует ~5MB в моей системе. На самом деле Значок панели задач notifier, который идет с ним, поднимает больше памяти, чем сервис на уровне приблизительно 6 МБ. Это повышается, когда это действительно наполняет, конечно.

30
задан jai 22 September 2009 в 07:55
поделиться

3 ответа

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

Между прочим, проект c3p0 практически мертв, я рекомендую вам использовать Вместо этого Apache Commons DBCP все еще поддерживается.

24
ответ дан 28 November 2019 в 00:16
поделиться

Код мне кажется прекрасным, но я бы написал вспомогательный метод, который выполняет операции закрытия, иначе вы получите этот подробный блок finally в каждом DAO или методе. Возможно, вам стоит написать три отдельных блока try-catch вокруг операций закрытия, чтобы убедиться, что соединение закрыто, независимо от того, вызвали ли выполнение оператор и набор результатов. Также обратите внимание, что javadoc говорит

Когда объект Statement закрывается, его текущий объект ResultSet, если он существует, также закрывается.

Таким образом, вам не нужно закрывать набор результатов в приведенном выше примере, но вы можете.

Связанный метод очистки предназначен для закрытия источника данных, что не требуется в большинстве проектов, поскольку DS существует до тех пор, пока ваше приложение запущено.

5
ответ дан 28 November 2019 в 00:16
поделиться

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

Если какой-либо из вызовов close в вашем блоке finally вызывает исключение, ни один из последующих вызовов не будет вызван. Каждый должен быть в своем собственном блоке try / catch. Я помещаю их в служебный класс как статические методы.

6
ответ дан 28 November 2019 в 00:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: