使用C3P0时,数据库链接死锁的解决

本文介绍C3P0连接池的配置参数,特别是超时设置的重要性,并通过一个实例说明了不当的连接管理和传递如何导致死锁及解决方法。

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

使用C3P0 链接池,一开始没有设置timeout,死锁不释放,造成程序卡死。


dataSource.setDriverClass("com.mysql.jdbc.Driver");


       dataSource.setJdbcUrl(url);//设置连接数据库的URL  
                
       dataSource.setUser(user);//设置连接数据库的用户名
                
       dataSource.setPassword(password);//设置连接数据库的密码  
                
       dataSource.setMaxPoolSize(20);//设置连接池的最大连接数
                
       dataSource.setMinPoolSize(10);//设置连接池的最小连接数
                
       dataSource.setInitialPoolSize(10);//设置连接池的初始连接数
                
       dataSource.setMaxStatements(500);//设置连接池的缓存Statement的最大
       
       dataSource.setCheckoutTimeout(20000);//当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒。Default: 0
       

       dataSource.setMaxIdleTime(3000); //最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0


1. 在程序中

A{

conn = getConnection,

calll B(conn)

{

     getConnection()

      call C()

     {

           getConection()

      }

     releaseConnection()

}

releaseConnection

}


在这种嵌套的调用中,conn还有传递

如果一个地方没有及时释放,最终导致死锁。 A要获取链接,没有,B在等待释放,A还在等着B返回,再释放链接。

使用的链接的正确方法

获取链接。立刻操作数据库,操作完数据库,立刻将链接释放。 不要一层层将链接往子函数里面传。

原则:

 链接操作数据库,立刻释放。不要一直占着

 数据库链接设置超时,超时自动释放



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值