合益环保东莞网站建设,南宁seo服务公司,山东省住房和城乡建设厅服务网站,网站建设公司如何做大文章目录什么是连接池什么是HikariCPHikariCP 解决了哪些问题#xff1f;为什么要使用 HikariCP#xff1f;HikariCP 的使用Maven支持数据库什么是连接池
数据库连接池负责分配、管理和释放数据库的连接。
数据库连接复用#xff1a;重复使用现有的数据库长连接#xff0…
文章目录什么是连接池什么是HikariCPHikariCP 解决了哪些问题为什么要使用 HikariCPHikariCP 的使用Maven支持数据库什么是连接池
数据库连接池负责分配、管理和释放数据库的连接。
数据库连接复用重复使用现有的数据库长连接可以避免连接频繁建立、关闭的开销。 统一的连接管理释放空闲时间超过最大空闲时间的数据库连接避免因为没有释放数据库连接而引起的数据库连接泄漏。
什么是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 解决了哪些问题
创建和关闭数据库连接的开销很大HikariCP 通过“池”来复用连接减小开销。
为什么要使用 HikariCP
HikariCP 是目前最快的连接池。就连风靡一时的 boneCP 也停止维护主动让位给它。SpringBoot 也把它设置为默认连接池。
HikariCP 的使用
重要参数 maximum-pool-size 池中最大连接数包括空闲和正在使用的连接 minimum-idle 池中最小空闲连接数量。默认值10 pool-name 连接池的名字 auto-commit 是否自动提交池中返回的连接。默认值为true。 idle-timeout 空闲时间。仅在minimum-idle小于maximum-poop-size的时候才会起作用。默认值10分钟。 max-lifetime 连接池中连接的最大生命周期。当连接一致处于闲置状态时数据库可能会主动断开连接。 connection-timeout 连接超时时间。默认值为30s可以接收的最小超时时间为250ms。但是连接池请求也可以自定义超时时间
#
# 配置数据源相关 使用 HikariCP 数据源
#
############################################################
# 等待连接池分配连接的最大时长毫秒超过这个时长还没可用的连接则发生SQLException 默认:30秒
spring.datasource.hikari.connection-timeout30000
# 最小连接数
spring.datasource.hikari.minimum-idle5
# 最大连接数
spring.datasource.hikari.maximum-pool-size15
# 自动提交
spring.datasource.hikari.auto-committrue
# 一个连接idle状态的最大时长毫秒超时则被释放retired默认:10分钟
spring.datasource.hikari.idle-timeout600000
# 连接池名字
spring.datasource.hikari.pool-nameDatebookHikariCP
# 一个连接的生命时长毫秒超时而且没被使用则被释放retired默认:30分钟 1800000ms建议设置比数据库超时时长少60秒参考MySQL wait_timeout参数show variables like %timeout%; --
spring.datasource.hikari.max-lifetime28740000
spring.datasource.hikari.connection-test-querySELECT 1注意如果配置不当数据库连接池也可能因影响到系统性能
Maven
dependencygroupIdcom.zaxxer/groupIdartifactIdHikariCP/artifactIdversion1.3.5/versionscopecompile/scope
/dependency支持数据库
支持多种常见的数据库包含但不限于 Oracle、MS SQL Server、MySQL、PostgreSQL