最近写的一个项目,发现每次启动tomcat进行几个数据库操作后就会卡住,重启tomcat又可以继续用,几个数据库操作后继续不可用。
在mysql中查询show processlist,发现这个项目的数据库有很多process在Sleep状态。
关闭tomcat,重启mysql,让数据库中的进程恢复0。
启动tomcat,这时候看到这个项目的数据库有5个连接,这是因为hibernate.cfg.xml里面配置了最小连接数是5
<property name="hibernate.c3p0.min_size">5</property>
用浏览器进行数据库操作,每进行一次数据库操作就会用一个新的mysql process。当进行到第6个操作的时候,没有重用前面已经存在的5个进程,而是新建了3个。当数据库操作超过20次的时候,这是就卡住了,因为hibernate.cfg.xml里面配置了最大连接数是20
<property name="hibernate.c3p0.max_size">20</property>
不知道为什么每次都会用新的进程,根据网上找到的一些解决办法,设置这个参数hibernate.connection.release_mode,这个参数有4个可选的value: