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、连接池最大的连接数