Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Spring GetHibernateTemplate() или GetSession()

Автор вопроса: TJ-Ответов: 1

Я столкнулся с проблемой из-за неправильного понимания методов Spring -> GetHibernateTemplate/GetSession. Когда я использую собственный SQL-запрос [getSession().createSQLQuery(nativeQuery)] для извлечения некоторых записей из базы данных, мне кажется, что возникает тупиковая ситуация, и после N запросов пул соединений БД исчерпывается. Это пример того, что я вижу, когда проверяю это в db "SHOW ENGINE INNODB STATUS":

MySQL thread id 1106, query id 1360 localhost 127.0.0.1 test2
---TRANSACTION 0 19491, not started, OS thread id 2960035840

Что я делаю неправильно? Каков хороший способ запуска собственных запросов sql?

springhibernatesessionconnection-pooling

Ответы

Ответ 1 · atrain

Spring прозрачно обрабатывает открытие и закрытие соединений с БД. Таблица в начале главы о доступе к данным документации показывает, что вы обрабатываете и что обрабатывает Spring, последнее из которых включает в себя открытие и закрытие соединений. Кажется маловероятным, что дело в самой Spring.

Вместо этого, вот две возможности того, почему вы можете столкнуться с такой ситуацией:

  1. Ваш пул соединений каким-то образом неправильно настроен
  2. Вы этого не осознаете, но у вас есть какие-то неконтролируемые или действительно длительные/неэффективные запросы.

Если вы поднимете журнал для отладки, это даст больше подсказок.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы