JDBC之HikariCP连接池下载、配置、使用
数据库连接池负责分配、管理和释放数据库的连接。数据库连接复用:重复使用现有的数据库长连接,可以避免连接频繁建立、关闭的开销。统一的连接管理:释放空闲时间超过最大空闲时间的数据库连接,避免因为没有释放数据库连接而引起的数据库连接泄漏。HikariCP 是一个高性能的 JDBC 连接池组件,号称性能最好的后起之秀,是一个基于BoneCP做了不少的改进和优化的高性能JDBC连接池。其作者还有产出了另外一
HikariCP连接池介绍
1、什么是连接池
数据库连接池负责分配、管理和释放数据库的连接。
- 数据库连接复用:重复使用现有的数据库长连接,可以避免连接频繁建立、关闭的开销。
- 统一的连接管理:释放空闲时间超过最大空闲时间的数据库连接,避免因为没有释放数据库连接而引起的数据库连接泄漏。
3、什么是HikariCP
HikariCP 是一个高性能的 JDBC 连接池组件,号称性能最好的后起之秀,是一个基于BoneCP做了不少的改进和优化的高性能JDBC连接池。
其作者还有产出了另外一个开源作品HikariJSON——高性能的JSON解析器。
代码体积更是少的可怜,130kb。Spring Boot 2都已经宣布支持了该组件,由之前的Tomcat换成HikariCP。
其性能远高于c3p0、tomcat等连接池,以致后来BoneCP作者都放弃了维护,在Github项目主页推荐大家使用HikariCP
上边说到是在BoneCP基础上做了优化,那做了哪些优化呢?
- 字节码精简 :优化代码(HikariCP利用了一个第三方的Java字节码修改类库Javassist来生成委托实现动态代理,动态代理的实现在ProxyFactory类),直到编译后的字节码最少,这样,CPU缓存可以加载更多的程序代码;
- 优化代理和拦截器:减少代码,例如HikariCP的Statement proxy只有100行代码,只有BoneCP的十分之一;
- 自定义数组类型(FastStatementList)代替ArrayList:避免每次get()调用都要进行range check,避免调用remove()时的从头到尾的扫描,相对与ArrayList极大地提升了性能,而其中的区别是,ArrayList在每次执行get(Index)方法时,都需要对List的范围进行检查,而FastStatementList不需要,在能确保范围的合法性的情况下,可以省去范围检查的开销。
- 自定义集合类型(ConcurrentBag):支持快速插入和删除,特别是在同一线程既添加又删除项时,提高并发读写的效率;
- 针对CPU的时间片算法进行优化:尽可能在一个时间片里面完成各种操作(具体机制比较模糊)。
- 针对连接中断的情况:比其他CP响应时间上有了极好的优化,响应时间为5S,会抛出SqlException异常,并且后续的getConnection()可以正常进行
- 关于Connection的操作:另外在Java代码中,很多都是在使用完之后直接关闭连接,以前都是从头到尾遍历,来关闭对应的Connection,而HikariCP则是从尾部对Connection集合进行扫描,整体上来说,从尾部开始的性能更好一些。
HikariCP jar包下载
需要jar包以及版本,MySql版本一定要与本地电脑的版本一致:
mysql-connector-j-8.0.33.jar
(jdbc)
HikariCP-4.0.3.jar
(hikaricp连接池)
slf4j-api-1.7.9.jar
(日志组件)
一、HikariCP 官网下载路径如下:
Central Repository: org/slf4j/slf4j-api/1.7.25 (maven.org)
Central Repository: com/zaxxer/HikariCP/4.0.3 (maven.org)
MySQL :: 下载 MySQL Connector/J (存档版本)
二、下载好 druid 的jar包
三、将下载好的 jar 包导入到idea项目里面去
1、根据个人需要将 HikariCP-4.0.3.jar
和 slf4j-api-1.7.9.jar
jar包文件复制到项目的 lib 路径下。
2、将lib文件夹 “添加为库” 或 将添加的jar包 “添加为库”(必要操作)
HikariCP 配置及使用(这里以MySql数据库演示)
一、HikariCP 配置及使用(使用配置文件初始化连接池配置)
1、创建properties配置文件
我用的是配置 文件名.properties
文件的方式,文件名随意。在项目的 src 目录下新建就行。:
配置文件内容:
# 驱动程序(加载MySql)
DriverClassName=com.mysql.cj.jdbc.Driver
# MySql数据库,自己创建的数据路径
JdbcUrl=jdbc:mysql://localhost:3306/20231124db?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false
# 用户名
Username=root
# 密码
Password=sasa
# 最大加载数量
MaximumPoolSize=60
# 最小加载数量
MinimumIdle=20
# 最大连接延迟时间,单位ms
MaxLifetime=6000
2、连接MySql数据库操作
public static void main(String[] args) throws IOException, SQLException {
//获取配置文件
Properties properties = new Properties();
properties.load(new FileInputStream("src\\database.properties"));
//将获取到的配置文件进行初始化配置
HikariConfig config = new HikariConfig(properties);
//创建HikariDataSource数据源
HikariDataSource dataSource = new HikariDataSource(config);
//从数据源获取连接
Connection conn = dataSource.getConnection();
//判断是否成功获取到连接
if (conn !=null){
System.out.println("连接成功");
}else {
System.out.println("连接失败");
}
//释放连接到连接池
conn.close();
dataSource.close();
}
运行结果:
二、HikariCP 配置及使用(使用代码来初始化连接池配置)
1、连接MySql数据库操作
public static void main(String[] args) throws SQLException {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/20231124db");
config.setUsername("root");
config.setPassword("sasa");
config.setPoolName("MyPool");
config.setMaximumPoolSize(10);
HikariDataSource dataSource = new HikariDataSource(config);
Connection conn = dataSource.getConnection();
if (conn !=null){
System.out.println("连接成功");
}else {
System.out.println("连接失败");
}
conn.close();
dataSource.close();
}
运行结果:
总结
通过本文的指导,你应该已经掌握了如何使用HikariCP连接池来优化和管理数据库连接。连接池可以大大提高数据库访问的性能和可伸缩性,而HikariCP作为一个高性能的连接池实现,可以帮助你更好地管理数据库连接。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)