Java 使用Spring休眠:连接太多

Java 使用Spring休眠:连接太多,java,sql,spring,hibernate,Java,Sql,Spring,Hibernate,我们的项目使用Hibernate 3.2.7.ga和Springs 2.5.6来处理db交互。 在生产服务器上,在一定数量的用户连接(不超过10个)后,我们开始出现以下错误: javax.servlet.ServletException: javax.servlet.ServletException: org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Sessi

我们的项目使用Hibernate 3.2.7.ga和Springs 2.5.6来处理db交互。 在生产服务器上,在一定数量的用户连接(不超过10个)后,我们开始出现以下错误:

javax.servlet.ServletException: javax.servlet.ServletException: 
org.springframework.transaction.CannotCreateTransactionException: 
Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.GenericJDBCException: Cannot open connection
这源自:

org.postgresql.util.PSQLException: FATAL: 
connection limit exceeded for non-superusers
阅读类似的问题,我发现罪魁祸首通常是不使用池数据源。所以我去检查了弹簧的配置,发现了这个-

applicationContext.xml: spring配置将表明所使用的数据源是Commons的基本数据源,它应该支持连接池

关于我应该检查什么有什么想法吗

[最新评论] 至于最大活动连接数,我将配置文件更改为

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" > <!--class="org.springframework.jdbc.datasource.DriverManagerDataSource">-->
    <property name="driverClassName"><value>${jdbc.driverClassName}</value></property>
    <property name="url"><value>${jdbc.url}</value></property>
    <property name="username"><value>${jdbc.username}</value></property>
    <property name="password"><value>${jdbc.password}</value></property>
    <property name="maxActive"><value>1</value></property>
</bean>

至于事务和池管理器,我的印象是这是由applicationContext中定义的SpringBean在幕后处理的,但我并不确定这一点。

支持,是的,但是您假设(8)是可以接受的。您可以尝试降低数字以符合数据库的要求。请选择哪个spring版本并向我们显示一些数据库代码。您如何管理事务?另外,您是否可以显示连接池配置?回答了问题更新中的评论
WebApplicationContextUtils.getRequiredWebApplicationContext(httpRequest.getSession().getServletContext()).getBean("SpringHibernateDao");
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" > <!--class="org.springframework.jdbc.datasource.DriverManagerDataSource">-->
    <property name="driverClassName"><value>${jdbc.driverClassName}</value></property>
    <property name="url"><value>${jdbc.url}</value></property>
    <property name="username"><value>${jdbc.username}</value></property>
    <property name="password"><value>${jdbc.password}</value></property>
    <property name="maxActive"><value>1</value></property>
</bean>
public void save(LikeRecord like){
    getHibernateTemplate().save(like);
}

public boolean existsUserWithEmail(String email){
    Criteria crit = getSession().createCriteria(Utente.class);
    crit.add(Restrictions.eq("email", email));
    Utente user = (Utente) crit.uniqueResult();
    if(user==null)return false;
    else return true;
}
public boolean existsUserWithUsername(String userName){
    Criteria crit = getSession().createCriteria(Utente.class);
    crit.add(Restrictions.eq("loginid", userName));
    Utente user = (Utente) crit.uniqueResult();
    if(user==null)return false;
    else return true;
}