Spring GetHibernateTemplate() или GetSession()

Я столкнулся с проблемой из-за неправильного понимания методов 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?


person TJ-    schedule 25.08.2011    source источник


Ответы (1)


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

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

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

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

person atrain    schedule 25.08.2011