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

使用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返回,再释放链接。

使用的链接的正确方法

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

原则:

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

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



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值