2015-03-08 2 views
0

У меня есть приложение, которое использует базу данных в нескольких параллельных сеансах (более 1000). В Postgres максимальное количество доступных подключений установлено по умолчанию 100, и я не изменяю это.Hibernate + PostgreSQL Ошибка «слишком много подключений»

Hibernate имеет максимальный размер пула подключений - 20, но приложение, похоже, игнорируется и выбрасывает ошибку «Слишком много соединений».

Таким образом, проблема заключается в том, как обрабатывать более 1000 сеансов, когда доступно только 100? Есть ли очередь или smth, как это возможно?

ответ

2

Hibernate имеет максимальный размер пула подключений - 20, но приложение, похоже, игнорируется и выбрасывает ошибку «Слишком много соединений».

Дважды проверить использование спящего режима Session Factory:

  • в случае, если Ваше это веб-приложение, читать это [1]
  • в случае вашего является автономное приложение читать эту [2]

Часто проблема заключается в плохом использовании сеанса Hibernate.

[1] https://developer.jboss.org/wiki/UsingHibernatewithTomcat [2] http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch01.html#tutorial-firstapp-workingpersistence

Таким образом, проблема в том, как обрабатывать более 1000 сеансов, когда только доступна 100? Есть ли такая очередь или что-то вроде этого?

100 - это одновременное подключение, которое вы можете открыть, над ними вы можете выполнить более 100 операций: Hibernate просто управляет очередью для вас.

+0

Я взял случай [2] и изменил '.openSession()' на '.getCurrentSession()'; .. и т. Д., Как там описано. Но никакого эффекта нет. В приложении каждый сеанс создает из разных потоков одновременно (1000 потоков = 1000 сеансов), а '.getCurrentSession() создает новый сеанс в любом случае, как' .openSession() 'делает. В этом случае из 1000 пользователей будет превышено ограничение соединения с db, и ошибка будет сброшена. Вот почему я хочу поставить в очередь. Но Hibernate, похоже, не хочет управлять этим для меня :( – WildDev

+0

Я попытался открыть сеанс один раз и вложил в него threadpool, но, похоже, это плохая идея из-за ошибки 'Hibernate не поддерживает вложенные транзакции' – WildDev

+0

Вы использовали синглтон как есть? http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch01.html#tutorial-firstapp-helpers – aqquadro

Смежные вопросы