Превышен лимит соединения PostgreSQL для не суперпользователей - PullRequest
6 голосов
/ 29 февраля 2012

Я использую приложение Spring и получаю следующее исключение:

Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.GenericJDBCException: Cannot open connection.

Когда я вручную пытаюсь подключиться к базе данных с помощью DBVisualizer, я получаю следующую ошибку

An error occurred while establishing the connection:

Long Message:
FATAL: connection limit exceeded for non-superusers

Details:
   Type: org.postgresql.util.PSQLException
   Error Code: 0
   SQL State: 53300

Вот мой файл spring-context.xml

<jee:jndi-lookup id="dataSource1" jndi-name="jdbc/PmdDS"/>


    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource1" />
        <property name="configLocation">
            <value>classpath:hibernate.cfg.xml</value>
        </property>
        <property name="configurationClass">
            <value>org.hibernate.cfg.AnnotationConfiguration</value>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="current_session_context_class">thread</prop>
                <prop key="cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>

            </props>
        </property>
    </bean>

У меня вопрос, я получаю эту ошибку, потому что я не добавил следующую строку в spring-context.xml

 <prop key="hibernate.connection.release_mode">auto</prop>

Будет ли добавление этой строки решит мою проблему.Я боюсь, что мое приложение создает соединение, но не освобождает соединение с базой данных, потому что я не добавил вышеуказанную строку в spring-context.xml. Примечание. Я не использую HibernateTemplate.Я использую sessionFactory.getCurrentSession().createQuery("").list() для запуска своих запросов. Мои Context.xml детали

<Context>
     Specify a JDBC datasource 
    <Resource name="jdbc/PmdDS" 
              auth="Container"
              type="javax.sql.DataSource" 
              username="sdfsfsf" 
              password="sfsdfsdf" maxActive="-1"
              driverClassName="org.postgresql.Driver"
              url="jdbc:postgresql://111.11.11.11:5432/test"/>


</Context>

Пожалуйста, предложите любое решение

Ответы [ 2 ]

2 голосов
/ 28 июля 2012

(запись шагов, которые я предпринял с той же проблемой)

  1. Проверьте свой источник данных - ищите maxActive число.
  2. Проверьте настройки Postgresql: SELECT * FROM pg_settings - найдите строку с max_connections.

Если первое число больше второго, у вас проблема. Либо опустите первое, либо увеличьте второе (в postgresql.conf вашего экземпляра).

Кроме того, не забудьте сохранить некоторые резервные соединения для других серверов, обращающихся к той же БД, а также некоторые инструменты управления БД:)

2 голосов
/ 29 февраля 2012

Проблема в настройке источника данных

Значение по умолчанию для максимального количества соединений больше, чем максимальное число, установленное в postgres, и когда hibernate запрашивает другое соединение, источник данных пытается создать его.

Можете ли вы показать конфигурацию вашего источника данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...