文章目录
- 😎一、HikariCP连接池介绍
- 😎二、导入的jar包
- 😎三、代码演示
- 🧨Properties配置文件
- 🧨使用配置文件连接
- 🧨运行结果
- 😎四、总结
✨前言:本章主要学习hikaricp连接池的介绍以及使用
😎一、HikariCP连接池介绍
在我们的工作中,免不了要和数据库打交道,而要想和数据库打好交道,选择一款合适的数据库连接池就至关重要,我们基本使用的数据库连接池有 c3p0、DBCP、BoneCP、Druid 等,而我们这次要介绍的主角是 HiKariCP,HiKariCP 号称业界跑得最快的数据库连接池,近几年发展的风生水起,更是被 Spring Boot 2.0 选中作为其默认数据库连接池。
HiKariCP 全称 HiKari Connection Pool,HiKari 源自日语 - 光
😎二、导入的jar包
一些为直接下载,一些去官网下载
https://mvnrepository.com/artifact/com.zaxxer/HikariCP/4.0.3
https://mvnrepository.com/artifact/org.slf4j/slf4j-api/1.7.25
https://repo1.maven.org/maven2/org/slf4j/slf4j-log4j12/1.7.25/slf4j-log4j12-1.7.25.jar
😎三、代码演示
🧨Properties配置文件
代码如下:
# 连接URL
jdbcUrl=jdbc:mysql://localhost:3306/mydatabase
# 用户名
username=myusername
# 密码
password=mypassword
# 连接池名称
poolName=MyConnectionPool
# 连接池大小
maximumPoolSize=10
# 最小连接数
minimumIdle=5
# 连接超时时间(毫秒)
connectionTimeout=30000
# 空闲连接超时时间(毫秒)
idleTimeout=600000
# 最大生存时间(毫秒)
maxLifetime=1800000
🧨使用配置文件连接
代码如下:
package HikariCP;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.junit.Test;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
public class demo1 {
@Test
public void testHikari() throws IOException, SQLException {
//1.配置连接池
//也可以通过properties配置文件配置连接池new HikariConfig(Properties properties)
Properties properties = new Properties();
FileInputStream fileInputStream = new FileInputStream("src\\HikariCP.properties");
properties.load(fileInputStream);
HikariConfig hikariConfig = new HikariConfig(properties);
//2.通过配置类生成HikariCP连接池对象
HikariDataSource dataSource = new HikariDataSource(hikariConfig);
System.out.println(dataSource.getConnection());
}
}
🧨运行结果
😎四、总结
HikariCP连接池是高性能的JDBC连接池,官网标注的三大特点:快速、简单、可靠,性能优于其他连接池。
官网详细地说明了HikariCP所做的一些优化,总结如下:
字节码精简:优化代码,直到编译后的字节码最少(展平继承层次结构,掩饰成员变量,消除强制类型转换),这样,CPU缓存可以加载更多的程序代码;
优化代理和拦截器:减少代码,例如HikariCP的Statement proxy只有100行代码,只有BoneCP的十分之一;
自定义数组类型(FastStatementList)代替ArrayList:避免每次get()调用都要进行range
check,避免调用remove()时的从头到尾的扫描; 自定义无锁集合类型(ConcurrentBag):提高并发读写的效率;