2

我在我的项目中使用 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并看到了很多联系。有什么问题,你怎么看?

4

2 回答 2

6

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

org.springframework.jdbc.datasource.DriverManagerDataSource

现在我使用org.apache.commons.dbcp.BasicDataSource它并且效果很好!

在此处查看类似问题 - Single database connection with HibernateTemplate and SessionFactory

于 2012-12-28T08:57:15.403 回答
0

您有最大<prop key="hibernate.c3p0.max_size">50</prop>连接数,而MySQL 默认连接数是 151,您的应用程序是唯一访问该数据库实例的应用程序吗?看起来不像。即使您的连接保持打开状态(我在使用 c3p0 时对此表示怀疑),您最多也设置了 50 个。另一种可能性是其他地方的连接泄漏,一个 JDBC 代码或配置,无论是 Hibernate,Spring,您都可以获得额外的连接。

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

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

于 2012-12-27T11:59:18.423 回答