我在项目中使用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
并看到很多连接。
有什么问题,您怎么看?
答案 0 :(得分:5)
问题出在数据源中。我用了
org.springframework.jdbc.datasource.DriverManagerDataSource
现在我使用org.apache.commons.dbcp.BasicDataSource
,它完美无缺!
在此处查看类似问题 - Single database connection with HibernateTemplate and SessionFactory
答案 1 :(得分:0)
MySQL default number of connections is 151时最多有<prop key="hibernate.c3p0.max_size">50</prop>
个连接,您的应用程序是唯一访问该数据库实例的应用程序吗?看起来不像。即使您的连接处于打开状态(我怀疑它在使用c3p0时),您也设置了最多50个。另一种可能是连接泄漏到其他地方,JDBC代码或配置Hibernate,Spring,您可以获得其他连接。
更新:可能MySQL连接数max_connections
配置已更改为较低值。
更新:使用例如MySQL工作台并检查数据库实例活动连接的来源。