Здравствуйте, после нескольких запросов в приложении я столкнулся с таким исключением
java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30002ms.
я не настраивал пул коннектов, моей задачей было использовать в Spring приложении обычный Hibernate, для этого я из EntityManager каждый раз вынимал Session и работал с ней, как это делается в обычном hibernate. За пул коннектов, на сколько я понял, отвечает dataSource, а это штука уже по части JDBC. Каким образом мне в моем приложении не переполнять пул коннектов или освобождать его используя средства Hibernate
Мои Dao имплементации выглядят примерно так :
@Component
public class GrowBoxDaoImpl implements GrowBoxDao {
@Autowired
private EntityManagerFactory entityManagerFactory;
@Override
public List<GrowBox> findByUser(Long userId) {
Session session = entityManagerFactory.unwrap(SessionFactory.class).openSession();
String hqlQuery = "from GrowBox gb where gb.responsibleUser.id =: userId";
Query query = session.createQuery(hqlQuery);
query.setParameter("userId", userId);
List growBoxes = query.getResultList();
session.close();
return growBoxes;
}
@Override
public GrowBox findById(Long id) {
Session session = entityManagerFactory.unwrap(SessionFactory.class).openSession();
GrowBox growBox = session.get(GrowBox.class, id);
session.close();
return growBox;
}
@Override
public GrowBox saveBox(GrowBox box) {
Session session = entityManagerFactory.unwrap(SessionFactory.class).openSession();
session.getTransaction().begin();
session.saveOrUpdate(box);
session.flush();
session.getTransaction().commit(); // call flush too
session.close();
return box;
}
@Override
public void deleteBox(Long id) {
String hqlQuery = "delete GrowBox where id =: id";
Session session = entityManagerFactory.unwrap(SessionFactory.class).openSession();
session.getTransaction().begin();
session.createQuery(hqlQuery).setParameter("id", id).executeUpdate();
session.flush();
session.getTransaction().commit();
session.close();
}
}
у меня несколько сущностей, для каждой свой Dao и свой Service, несколько контроллеров в которых эти Сервисы используются
в своем Dao я старался корректно выполнять транзакции и всегда закрывал сессии
вот полный репозиторий проекта, если это поможет
https://github.com/DennisKingsman/HibernateWithSpr...
P.S. метод disconnect(); тоже не помогает