【JDBC】-- Druid数据库连接池技术的实现

在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤:

  • 在主程序建立数据库连接
  • 进行sql操作
  • 断开数据库连接

这种模式,存在以下问题:

  • 每次连接数据库需要建立连接,执行完再断开连接,会消耗大量的资源和时间,数据库的连接资源并没有得到很好的重复利用。
  • 对于每一次数据库连接,使用完都得断开。否则,如果程序出现异常为关闭,将导致数据库系统内存泄漏。
  • 这种开发不能控制被创建的连接对象数,系统资源会被毫不顾忌的分配出去。

一、数据库连接技术

  • 为解决传统开发数据库连接问题,可采用连接池技术
  • 基本思想:为数据库连接建立一个“缓冲池”,预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从缓冲池中取出一个,使用完再放回去。
  • 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。
  • 数据库连接的数量由最小数据库连接数设定,最大数据库连接数量限定能占有的最大连接数,最大最小连接数在连接数据库时设定,当请求连接数超过最大连接数量,这些请求将被加入到等待队列中。

 二、Druid(德鲁伊)

数据库连接池开源组织实现有很多,这里使用Druid,也是开发中常用的一种;

Druid是阿里提供的数据库连接池,集DBCP、C3P0、Proxool优点于一身的数据库连接池;

下面使用idea+mysql8实现。

代码实现

1、加载驱动

将驱动文件复制到lib文件下并添加为库。

 2、创建配置文件druid.properties

封装连接数据库的基本信息

url=jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT
username=root
password=ad
driverClassName=com.mysql.cj.jdbc.Driver

initialSize=7
maxActive=10

详细配置参数

配置说明
name如果存在多个数据源,监控的时候可以通过名字区分,如果没有配置,会生成一个名字,格式:“DataSource”+System.identityHashCode(this)
url连接数据库的url
username连接数据库的用户名
password连接数据库的密码
driverClassName

可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName(建议配置下)

initialSize初始化时建立物理连接的个数
maxActive最大连接池数量

3、连接数据库

方式一

    public static void getConnection() throws Exception{
        Properties pros = new Properties();
        InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");
        pros.load(is);
        DataSource source = DruidDataSourceFactory.createDataSource(pros);
        Connection conn = source.getConnection();
        System.out.println(conn);
    }

方式二(优化)

创建JDBCUtils类

用于封装连接数据库方法

 /**Druid数据库连接池技术*/
    private static DataSource source;
    static {
        try {
            Properties pros = new Properties();
            InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");
            pros.load(is);
            source = DruidDataSourceFactory.createDataSource(pros);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    public static Connection getConnection1() throws SQLException{
        Connection conn = source.getConnection();
        return conn;
    }

4、测试

    /**使用druid连接池*/
    void getCustomerById() {
        Connection conn = null;
        try {
            conn = JDBCUtils.getConnection1();
            Customer cust = dao.getCustomerById(conn,19);
            System.out.println(cust);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            JDBCUtils.closeResource(conn,null);
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

四月天行健

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值