hibernate c3p0 连接无法释放 阻塞数据库操作

项目启动后,数据库操作会导致连接阻塞,hibernate.c3p0.min_size配置为5,max_size配置为20。尝试设置hibernate.connection.release_mode解决连接释放问题,发现after_statement破坏事务性,after_transaction适合作业需求。最后通过Spring注入sessionFactory并使用getCurrentSession()解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近写的一个项目,发现每次启动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:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值