ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

c3p0和druid数据库连接池

2021-09-16 13:04:41  阅读:209  来源: 互联网

标签:jdbc 配置文件 druid c3p0 mysql 连接 连接池


c3p0和druid数据库连接池

前言

| 编程知识点繁多,许多文章又是用专业名词来解释专业名词,对我这种小白十分不友好,今天用大白话简单整理下数据库连接池技术。

简介

传统jdbc

| java里传统连接数据库是用的jdbc,这个大大滴不好,因为要反复连接反复释放,特别浪费资源,

啥是连接池

对于重复利用的共享资源,建议使用资源池设计模式(Resource Pool),就是先在池子中放几个连接,谁用谁拿,用完放回去,就不用反复多次的连接释放了

为啥要有连接池

解决反复用jdbc连接数据库造成的资源浪费

怎么建立连接池

以下面两个例子展示

c3p0

导入jar

| 下载地址:下载地址

配置文件

| 在src下新建文件(file)c3p0-config.xml 复制下面代码改下数据源:

<c3p0-config>
   <!--使用默认配置读取连接池对象-->
    <default-config>
    <!--连接参数 需要改成自己的参数-->
    <property name="driverClass" >com.mysql.cj.jdbc.Driver</property>
    <property name="jdbcUrl" >jdbc:mysql://localhost:3306/oldproject?serverTimezone=GMT</property>
    <property name="user" >root</property>
    <property name="password" >123456</property>
    
    <!--连接池参数-->
    <property name="initialPoolSize">5</property><!--初始化数量-->
    <property name="maxPoolSize">10</property><!--最大数量-->
    <property name="checkoutTimeout">3000</property><!--超时时间-->
    </default-config>
	
	<!--自己命名的连接-->
    <name-config name="otherc3p0">
        <!--连接参数-->
        <property name="driverClass" >com.mysql.cj.jdbc.Driver</property>
        <property name="jdbcurl" >jdbc:mysql://localhost:3306/zzydb</property>
        <property name="user" >root</property>
        <property name="password" >123456</property>
        <!--连接池参数-->
        <property name="initialPoolSize">5</property>
        <property name="maxPoolSize">8</property>
        <property name="checkoutTimeout">1000</property>

    </name-config>

</c3p0-config>

测试连接

| 代码:

public class C3p0Demo1 {
    public static void main(String[] args) throws SQLException {
        /**
         * 创建数据库连接池对象
         */
        DataSource ds = new ComboPooledDataSource();
        /**
         * 获取连接
         */
        Connection conn = ds.getConnection();
        /**
         *打印连接
         */
        System.out.println(conn);
    }
}

控制台输出

红色是日志信息不是报错,最后一串就是打印出来的连接,到这就已经连接上了,具体的数据操作和jdbc基本一致。

Druid

导入jar包

| 下载地址:下载地址

配置文件

| 新建druid.properties文件如下:我这里用了8版本mysql,注意时区,和c3p0配置文件基本一致

url=jdbc:mysql://localhost:3306/oldproject?serverTimezone=GMT
driverClassName=com.mysql.cj.jdbc.Driver
username=root
password=123456
##初始连接数,默认0
initialSize=5
#最大连接数,默认8
maxActive=10
#最小闲置数
minIdle=10
#获取连接的最大等待时间,单位毫秒
maxWait=2000
#缓存PreparedStatement,默认false
poolPreparedStatements=true
#缓存PreparedStatement的最大数量,默认-1(不缓存)。大于0时会自动开启缓存PreparedStatement,所以可以省略上一句设置
maxOpenPreparedStatements=20

测试连接

| 代码:因为不是必须要求在src下,需要自己手动使用类加载器加载,学反射案例也用到这个

public class DruidDemo {
    public static void main(String[] args) throws Exception {
        /**
         * 加载配置文件
         */
        InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
        Properties pro = new Properties();
        pro.load(is);
        /**
         * 获取连接池对象
         */
        DataSource ds = DruidDataSourceFactory.createDataSource(pro);
        /**
         * 获取连接,连接次数为11次,超过配置中最大数量
         */
        for (int i = 0; i < 11; i++) {
            Connection conn = ds.getConnection();
            System.out.println(i+": "+conn);
        }


    }
}

控制台输出

因为配置文件中设置最大连接数量为10,而我新建11个,所以会报错,而且是前10个没问题(0-9),在生成第十一个时候,超时2秒后报错。
使用连接必须归还,close()方法在这里不再是关闭连接,而是放回连接池中!
在这里插入图片描述

标签:jdbc,配置文件,druid,c3p0,mysql,连接,连接池
来源: https://blog.csdn.net/weixin_60283557/article/details/120326423

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有