繁体   English   中英

使用Hibernate和Spring时连接过多

[英]Too many connections while using Hibernate and Spring

我在项目中使用Spring和Hibernate。 我用这样的道具

        <prop key="hibernate.hbm2ddl.auto">update</prop>
        <prop key="hibernate.dialect">${chassis.storage.hibernate.dialect}</prop>
        <prop key="hibernate.show_sql">false</prop>
        <prop key="hibernate.jdbc.batch_size">${chassis.storage.hibernate.batch_size}</prop>
        <prop key="hibernate.c3p0.min_size">5</prop>
        <prop key="hibernate.c3p0.max_size">50</prop>
        <prop key="hibernate.c3p0.timeout">300</prop>
        <prop key="hibernate.c3p0.max_statements">50</prop>
        <prop key="hibernate.c3p0.idle_test_period">3000</prop>

当我写一些数据时,我会使用这样的代码

    getHibernateTemplate().execute(new HibernateCallback<Void>() {
        @Override
        public Void doInHibernate(Session session) throws HibernateException, SQLException {
            for (Data data : datas) {
                session.persist(data);
            }
            session.flush();
            return null;
        }
    });

但是我有一个例外

引起原因:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:数据源拒绝建立连接,来自服务器的消息:“连接太多”

我使用netstat -an | grep 3306 netstat -an | grep 3306 ,看到很多连接。 有什么问题,您怎么看?

问题出在数据源中。 我用了

org.springframework.jdbc.datasource.DriverManagerDataSource

现在,我使用org.apache.commons.dbcp.BasicDataSource ,它可以完美运行!

在这里看到类似的问题- 与HibernateTemplate和SessionFactory的单个数据库连接

您最多具有<prop key="hibernate.c3p0.max_size">50</prop>连接,而MySQL默认的连接数是151 ,您的应用程序是唯一访问该数据库实例的应用程序吗? 看起来不是这样。 即使您的连接处于打开状态(使用c3p0时我也怀疑),您最多只能设置50个。另一种可能性是其他地方的连接泄漏,JDBC代码或Hibernate,Spring的配置(在其中获取了其他连接)。

更新:也许MySQL的连接数max_connections配置已更改为较低的值。

更新:使用例如MySQL工作台,并检查您的数据库实例活动连接来自何处。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM