Я столкнулся с проблемой из-за неправильного понимания методов 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?
Ответ 1 · atrain
Spring прозрачно обрабатывает открытие и закрытие соединений с БД. Таблица в начале главы о доступе к данным документации показывает, что вы обрабатываете и что обрабатывает Spring, последнее из которых включает в себя открытие и закрытие соединений. Кажется маловероятным, что дело в самой Spring.
Вместо этого, вот две возможности того, почему вы можете столкнуться с такой ситуацией:
- Ваш пул соединений каким-то образом неправильно настроен
- Вы этого не осознаете, но у вас есть какие-то неконтролируемые или действительно длительные/неэффективные запросы.
Если вы поднимете журнал для отладки, это даст больше подсказок.