В нашем слое DAO есть 19 методов, каждый из которых имеет свои вариации:
public TicketProp saveTicketProp(TicketProp prop) {
EntityManager em = this.emf.createEntityManager();
try {
em.getTransaction().begin();
prop = (TicketProp) em.merge(prop);
em.getTransaction().commit();
return prop;
} finally {
em.close();
}
}
Значение: в каждом методе мы обрабатываем собственную транзакцию и закрываем ее в блоке finally. Мы тестируем приложение на Джерси, поэтому наши тесты JUnit расширяют JerseyTest. Каждый метод тестирования создает экземпляр контейнера Grizzly, запускает тест и затем закрывает контейнер. EntityManagerFactory вводится весной. Мы используем JPA вместо Hibernate.
Я отслеживаю соединения с нашей тестовой БД MySQL, и они всегда высокие. Один только тест запускает переменную «Max_used_connections» в MySQL до 38. Ради интереса я пошел и закомментировал все вызовы em.close (), и в этом тесте все еще используются 38 соединений.
Я использую встроенный пул соединений Hibernate (я знаю, что не для использования в prod). Я все еще ожидал какого-то интеллектуального объединения.
Я неправильно обращаюсь с EntityManager? Как еще я могу закрыть соединения?