2012-02-29 7 views
4

Я использую приложение весны и я получаю следующее исключение, как:PostgreSQL предел соединения превышен для не суперпользователь

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 

Вот моя весна-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> 

Мой вопрос я получаю эту ошибку, потому что я не добавил следующую строку в весенне-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

Проблема заключается в конфигурации источника данных

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

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

+0

Я добавил записи context.xml в редактировании – Rajesh

+0

Попробуйте установить maxActive = «-1» для значения менее 100 (postgres default). Обычно достаточно 10-20. –

2

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

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

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

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

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