Tomcat学习笔记(10)--数据库连接池c3p0配置使用与踩雷

借助此博客的帮助:
https://blog.csdn.net/Another_dream/article/details/88699056
配置了一波c3p0连接池,效果还是不错的
使用的配置都是和博主配置一样
在这里插入图片描述
在这里插入图片描述

代码更新

我原本是将一个数据库连接操作(从登录数据库到做好业务逻辑再到关闭过程)封装成一个类的,因此我只要将这个类的构造方法改为从连接池里面拿一个连接出来就行。
并在数据库操作做完后归还这个连接


    Connection conn = null;
    Statement stmt = null;
    public MySQLConnect(){

        try{
            conn = C3P0Util.getConnection();
            stmt = conn.createStatement();
            /**
            // 注册 JDBC 驱动
            Class.forName(JDBC_DRIVER);
            // 打开链接
            conn = DriverManager.getConnection(DB_URL,USER,PASS);
            //打开Statement
            stmt = conn.createStatement();
            */
        } catch(Exception se){
            // 处理 JDBC 错误
            se.printStackTrace();
        }
    }
    @Override
    protected void finalize() throws SQLException {
        // 析构方法
        if(stmt!=null) {
            stmt.close();
        }
        C3P0Util.beginTransaction();
        C3P0Util.commitTransaction();
        C3P0Util.releaseConnection(conn);
    }
	······//各种被封装起来的数据库交互逻辑
}

下面记录一些配置与使用过程中发现的问题:

导包

c3p0总共要导3个包mchange-commons-java-0.2.20,c3p0-0.9.2.1,mysql-connector-java-8.0.16
少导一个都不行,当然第三个不用c3p0也要导…
链接:https://pan.baidu.com/s/1JxsHPuL2PqLW0sS0RABmJg
提取码:hqk3
同时版本问题注意一下,我的是8.0的数据库

顺便一提c3p0-config.xml文件在Idea中放进一个标记为资源根(Resources Root)的文件夹中即可。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
它最终会被放进编译后的文件的默认classpath中:
在这里插入图片描述

测试

但是测试的时候对页面进行疯狂刷新,很快就会连接请求时长爆表
在这里插入图片描述
报错为:c3p0 A client timed out while waiting to acquire a resource from com.mchange.v2.resourcepool.BasicResourcePool

推测原因应该是短时间内重复获取连接池连接,而没有等待正常业务逻辑完成后返回请求归还连接池资源的原因
当然猜测而已,反正造成的后果就是连接池泄露崩溃了。

解决方案:
提高最大连接数是可以缓解的,但应该不是最终方案
stack上有大佬指出设置一个参数用来自动对泄露的连接池资源进行归还管理
https://stackoverflow.com/questions/43630264/c3p0-a-client-timed-out-while-waiting-to-acquire-a-resource-from-com-mchange-v2

 <property name="unreturnedConnectionTimeout">20</property>

然后我随便怎么乱刷就都没有爆炸了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值