JDBC之HikariCP连接池下载、配置、使用

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.jarslf4j-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作为一个高性能的连接池实现,可以帮助你更好地管理数据库连接。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
注:下文中的 *** 代表文件名中的组件名称。 # 包含: 中文-英文对照文档:【***-javadoc-API文档-中文(简体)-英语-对照版.zip】 jar包下载地址:【***.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【***.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【***.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【***-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: 中文-英文对照文档,中英对照文档,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【***.jar中文文档.zip】,再解压其中的 【***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·本文档为双语同时展示,一行原文、一行译文,可逐行对照,避免了原文/译文来回切换的麻烦; ·有原文可参照,不再担心翻译偏差误导; ·边学技术、边学英语。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值