JDBC 数据库连接池

基本思想

  • 为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。
  • 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。
  • 最小数据库连接数:数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。
  • 最大数据库连接数:限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。
数据库连接池工作原理

优点

  • 资源重用
    由于数据库连接得以重用,避免了频繁创建,释放连接引起的大量性能开销。在减少系统消耗的基础上,另一方面也增加了系统运行环境的平稳性。
  • 更快的系统反应速度
    数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于连接池中备用。此时连接的初始化工作均已完成。对于业务请求处理而言,直接利用现有可用连接,避免了数据库连接初始化和释放过程的时间开销,从而减少了系统的响应时间
  • 新的资源分配手段
    对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接池的配置,实现某一应用最大可用数据库连接数的限制,避免某一应用独占所有的数据库资源
  • 统一的连接管理,避免数据库连接泄露
    在较为完善的数据库连接池实现中,可根据预先的占用超时设定,强制回收被占用连接,从而避免了常规数据库连接操作中可能出现的资源泄露

使用DBCP连接池

1.直接连接

    // 1.创建DBPC数据源实例
    BasicDataSource bds = null;
    bds = new BasicDataSource();

    // 2.设置数据库连接使用
    bds.setUsername("root");
    bds.setPassword("root");
    bds.setUrl("jdbc:mysql://127.0.0.1:3306/test1");
    bds.setDriverClassName("com.mysql.jdbc.Driver");

    // 3.指定数据库连接池属性
    // 3.1.设置初始连接数
    bds.setInitialSize(10);

    // 3.2.指定最大连接数,同一时刻向数据库申请的链接数和空闲的最大数
    bds.setMaxTotal(50);

    // 3.3.指定最小链接数:在数据库连接池中保存的最小的空闲连接的数量
    bds.setMinIdle(5);

    // 3.4.等待分配连接的最长时间,单位毫秒,超出则报异常
    bds.setMaxWaitMillis(1000 * 5);
    
    //4.从数据库获取连接
    Connection conn = bds.getConnection();

2.工厂方式连接

    String fileName = "dbcp.properties";
    Properties properties = new Properties();
    
    InputStream is = JDBCtest.class.getClassLoader().getResourceAsStream(fileName);
    properties.load(is);
    
    BasicDataSource bds = BasicDataSourceFactory.createDataSource(properties);
    Connection conn = bds.getConnection();

注:数据库连接池初始化一次
private static DataSource dataSource = null;
static { dataSource = BasicDataSourceFactory.createDataSource(properties);}
conn关闭时并不是真的关闭,而是归还给数据库连接池

推荐阅读更多精彩内容

  • DriverManager的实现方式一般是在主程序中建立数据库的连接,然后进行数据库的操作,操作完毕后断开数据库连...
    怪蜀黍Zzzzlw阅读 1,670评论 0 9
  • 声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互...
    凯哥学堂阅读 39评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 106,374评论 12 127
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 38,104评论 5 340
  • JDBC概述 在Java中,数据库存取技术可分为如下几类:JDBC直接访问数据库、JDO技术、第三方O/R工具,如...
    usopp阅读 2,957评论 3 75