Закрытие объекта соединения jdbc по истечении сеанса - PullRequest
1 голос
/ 15 марта 2012

Я создаю объект Connection и создаю соединение jdbc в конструкторе класса (DbTest).

Затем в другом Java-классе (RequestFilter.java) я инициализирую этот объект и сохраняю этот экземпляр объекта в сеансе HTTP,

DbTest dbtest = new DbTest();
session.setAttribute("dbtest", dbtest);

У меня вопрос, есть ли способ закрыть объект подключения, который был создан, когда истекает сеанс? Или он автоматически закроется по истечении срока действия?

Ответы [ 4 ]

4 голосов
/ 15 марта 2012

Вы можете реализовать HttpSessionListener и в рамках метода sessionDestroyed() выполнить очистку. Однако ваша архитектура беспокоит меня. Вы не должны хранить необработанное соединение JDBC в сеансе HTTP!

  • вы не можете перенести сеанс HTTP на другой сервер

  • Вы можете легко создавать тысячи открытых соединений с базой данных, HTTP-сессии гораздо проще

  • 99,9% времени простоя соединений с базой данных

  • вы, вероятно, не обрабатываете тайм-ауты соединения и другие сбои

Есть ли какие-либо причины иметь соединение на пользователя, а не пул соединений?

0 голосов
/ 19 августа 2014

управление пулом соединений, также может быть проблемой.Чтобы получить соединение из пула соединений, необходимо использовать синхронизацию, которая запрещает другим потокам (клиентам) доступ к пулу соединений.

0 голосов
/ 15 марта 2012

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

0 голосов
/ 15 марта 2012

Вы можете реализовать HttpSessionBindingListener.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...