jdbc中常见数据池:druid(德鲁伊),hikari(光)

jdbc中常见数据池:druid(德鲁伊),hikari(光)的连接方法

1、Druid(德鲁伊)

Druid是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、Proxool等DB池的优点,同时加入了【日志监控】,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池,可以说是目前最好的连接池之一。

网上搜一下jar包导入

https://mvnrepository.com/artifact/com.alibaba/druid

常见配置

@Test
public void testConn() throws SQLException {
    // 1、创建数据源
    DruidDataSource dataSource = new DruidDataSource();
    dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/ydlclass?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false");
    dataSource.setUsername("root");
    dataSource.setPassword("root");
​
    Connection connection = dataSource.getConnection();
    System.out.println(connection);
​
}
​
  @Test
    //第二种连接方法
    public void testConn2() throws SQLException, IOException {
        //1.创建数据源
        DruidDataSource dataSource = new DruidDataSource();
        Properties properties = new Properties();
        properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("META-INF/druid.properties"));
        dataSource.configFromPropety(properties);
        DruidPooledConnection connection = dataSource.getConnection();
        connection.close();

        System.out.println(dataSource);
    }

druid.properties 文件

druid.driverClassName=com.mysql.cj.jdbc.Driver
druid.url=jdbc:mysql://127.0.0.1:3306/ydlclass?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false
druid.username=root
druid.password=root
druid.initialSize=10
druid.minIdle=20
druid.maxActive=50
druid.maxWait=500
    
# 1、初始化时建立物理连接的个数 默认10
# 2、最小连接池数量  默认20
# 2、最大连接池数量  默认50
# 3、获取连接时最大等待时间,单位毫秒。

多线程连接测试

@Test
public void testConn2() throws SQLException, IOException, InterruptedException {
    // 1、创建数据源
    DruidDataSource dataSource = new DruidDataSource();
    Properties properties = new Properties();
    properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("druid.properties"));
    dataSource.configFromPropety(properties);
    //多线程创建连接
    for (int i = 0; i < 500; i++) {
        new Thread(()->{
            try {
                Connection connection = dataSource.getConnection();
                // 执行一段时间
                Thread.sleep(new Random().nextInt(1000));
                connection.close();
            }catch (SQLException | InterruptedException e){
                e.printStackTrace();
            }
        }).start();
    }
​
    Thread.sleep(6000);
​
    System.out.println(dataSource);
}

关闭资源

connection.close()

但是查询源码得知

这个关闭不是真正关闭,而是连接池对这个连接进行回收

3、 Hikari(光)

特点:快

需要配合slf4j使用

需要下载两个jar包

使用方法(跟druid大差不差)

public class TestHiKari {
​
    @Test
    public void getConnection() throws SQLException {
        // 创建数据源
        HikariDataSource dataSource = new HikariDataSource();
        // 配置数据源
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/ydlclass?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false");
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.getConnection();
    }
​
   @Test
    public void getConnection2() throws SQLException {
        //创建数据源
//        HikariDataSource dataSource = new HikariDataSource();
        //配置数据源
        HikariConfig hikariConfig = new HikariConfig("src/META-INF/Hikari.properties");
        HikariDataSource dataSource = new HikariDataSource(hikariConfig);
        System.out.println(dataSource.getConnection());
​
    }

properties 配置文件

jdbcUrl=jdbc:mysql://localhost:3306/ydlclass?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
username=root
password=root
driverClassName=com.mysql.cj.jdbc.Driver
​
idleTimeout=600000
connectionTimeout=30000
minimumIdle=10
maximumPoolSize=60
​
# 1、保持连接的最大时长,比如连接多了,最小连接数不够用,就会继续创建,比如又创建了10个,如果这时没有了业务,超过该设置的时间,新创建的就会被关闭
# 2、连接的超时时间
# 3、连接池最少的连接数
# 4、连接池最大的连接数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值