数据库连接池

1、为什么需要数据库连接池

通过JDBC连接数据库时,首先要加载驱动,连接数据库,操作,释放连接。
存在一些问题:
a、JDBC数据库连接使用 DriverManager 来获取,每次向数据库建立连接的时候都要将 Connection 加载到内存中,再验证用户名和密码(得花费0.05s~1s的时间)。需要数据库连接的时候,就向数据库要求 一个,执行完成后再断开连接。这样的方式将会消耗大量的资源和时间。数据库的连接资源并没有得到很好的重复利用。
b、对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将导致重启数据库。
c、这种开发不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。

2、数据库连接池原理

在这里插入图片描述可以通过Commons-pool2实现自己的连接池。

3、Druid数据库连接池使用

public class Demo05Druid {
    public static void main(String[] args) throws Exception {

        // Properties extends Hashtable<Object,Object> 实现了HaseTable接口,可以用来读取一些配置文件
        Properties properties = new Properties();
        // 不要通过具体路径去读,把配置文件当成有个资源getResourceAsStream
        InputStream is = Demo05Druid.class.getClassLoader().getResourceAsStream("jdbc2.properties");
        // load 函数的输入是一个流
        properties.load(is);

        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);

        for(int i = 0 ; i<10 ; i++){
            Connection conn1 = dataSource.getConnection();
            System.out.println(i+"-------->"+conn1);
            // 注意有close和没有close的区别
            // conn1.close();

        }

    }
}

配置文件:利用DruidDataSourceFactory.createDataSource创建连接池时,配置项名称必须和官方文档保持一致。
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/fruitdb?useSSL=false&useUnicode=true&characterEncoding=utf-8
username=root
password=123456
initialSize=2
maxActive=5
maxWait=5000

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值