【问题标题】:PostgreSQL connection limit exceeded for non-superusers非超级用户超出 PostgreSQL 连接限制
【发布时间】:2013-03-15 07:43:20
【问题描述】:

我正在使用 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>

请提出任何解决方案

【问题讨论】:

    标签: hibernate postgresql


    【解决方案1】:

    问题出在数据源的配置上

    最大连接数的默认值高于 postgres 中设置的最大连接数,当休眠请求另一个连接时,数据源会尝试创建一个。

    你能显示你的数据源的配置吗?

    【讨论】:

    • 尝试将 maxActive="-1" 设置为小于 100 的值(postgres 默认值)。通常 10 到 20 就足够了。
    【解决方案2】:

    (记录我遇到同样问题的步骤)

    1. 检查您的数据源 - 查找 maxActive 号码。
    2. 检查您的 Postgresql 设置:SELECT * FROM pg_settings - 查找带有 max_connections 的行。

    如果第一个数字大于第二个数字,则有问题。降低第一个或增加第二个(在您的实例的postgresql.conf 中)。

    另外,不要忘记为访问同一数据库的其他服务器保留一些保留连接,以及一些数据库管理工具:)

    【讨论】:

      猜你喜欢
      • 2012-02-26
      • 1970-01-01
      • 2012-11-14
      • 2019-03-12
      • 1970-01-01
      • 2016-11-28
      • 2013-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多