Что ж, получается, что мое приложение перестает работать, как только я перезагружаю страницу 5 раз (максимальное количество соединений), поэтому кажется, что каждый раз, когда я просматриваю базу данных, я не закрываю соединения, но не могу найти ошибку. Это конфигурация:
public class HibernateUtils {
private SessionFactory sessionFactory;
@Bean
public SessionFactory getSessionFactory() {
if (sessionFactory == null) {
try {
Configuration configuration = new Configuration();
// Hibernate settings equivalent to hibernate.cfg.xml's properties
Properties settings = new Properties();
settings.put(Environment.DRIVER, "com.mysql.cj.jdbc.Driver");
settings.put(Environment.URL, "jdbc:mysql://127.0.0.1:3306/streamdungeons");
settings.put(Environment.USER, "root");
settings.put(Environment.PASS, "");
settings.put(Environment.DIALECT, "org.hibernate.dialect.MySQL5InnoDBDialect");
settings.put(Environment.FORMAT_SQL, "true");
settings.put(Environment.SHOW_SQL, "true");
settings.put(Environment.CURRENT_SESSION_CONTEXT_CLASS, "thread");
settings.put(Environment.HBM2DDL_AUTO, Action.UPDATE);
settings.put(Environment.POOL_SIZE, 5);
configuration.setProperties(settings);
configuration.addAnnotatedClass(Usuario.class);
configuration.addAnnotatedClass(Personaje.class);
configuration.addAnnotatedClass(Rareza.class);
configuration.addAnnotatedClass(Categoria.class);
configuration.addAnnotatedClass(Item.class);
configuration.addAnnotatedClass(Cofre.class);
configuration.addAnnotatedClass(PersonajeCofre.class);
configuration.addAnnotatedClass(PersonajeItem.class);
configuration.addAnnotatedClass(ItemCofre.class);
configuration.addAnnotatedClass(Avatar.class);
configuration.addAnnotatedClass(Torneo.class);
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties()).build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
} catch (Exception e) {
e.printStackTrace();
}
}
return sessionFactory;
}
}
И это пример того, как я выполняю запросы к базе данных
@Repository
public class AvatarRepositoryImpl implements AvatarRepository {
@Autowired
private SessionFactory sessionFactory;
@Transactional(readOnly = true)
public List<Avatar> findAll() {
try {
return sessionFactory.openSession().createQuery("from Avatar", Avatar.class).list();
} catch (Exception e) {
return null;
}
}
@Transactional(readOnly = true)
public Avatar findById(int id) {
try {
return sessionFactory.openSession().createQuery("from Avatar where idAvatar = :id", Avatar.class).setParameter("id", id)
.getSingleResult();
} catch (Exception e) {
return null;
}
}
}
Исключение:
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is org.hibernate.HibernateException: The internal connection pool has reached its maximum size and no connection is currently available!] with root cause