Исключение из пула подключений - PullRequest
0 голосов
/ 28 февраля 2020

Что ж, получается, что мое приложение перестает работать, как только я перезагружаю страницу 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...