网站首页 > 开源技术 正文
为什么要用连接池
连接池是后端开发常用到的技术,为什么需要连接池,从TCP链接请求来讲。服务器跟数据库没有部署在同一个环境服务器上,每次获取数据查询数据库要先建立连接,即TCP链接,建立连接需要3次握手,那么就需要消耗掉一些时间,TCP有慢启动的机制,但是对于一次查询可能还不止1次TCP请求,查询效率低下。为了解决数据库连接慢的问题,就需要维护一些长链接,因此不用每次都去建立连接,建立连接除了占用一定的时间,还有其它资源的消耗。连接池还能让我们更方便管理,可以避免数据库资源都被多个API占用,同时可以避免资源泄露。
HikariCP是谁开发的
HikariCP是由日本程序员开源的一个数据库连接池组件,代码非常轻量,并且速度非常的快。根据官方提供的数据,在i7,开启32个线程32个连接的情况下,进行随机数据库读写操作,HikariCP的速度是现在常用的C3P0数据库连接池的数百倍。在SpringBoot2.0中,官方也是推荐使用HikariCP。
HikariCP快的原因
1.字节码更加精简,所以可以加载更多代码到缓存。
2.实现了一个无锁的集合类型,来减少并发造成的资源竞争。
3.使用了自定义的数组类型,对于ArrayList极大地提升了性能。
4.自定义集合类型(ConcurrentBag):提高并发读写的效率
5.针对CPU的时间片算法进行优化,尽可能在一个时间片里面完成各种操作。
spring:
datasource:
name: database-a
driver-class-name: com.mysql.cj.jdbc.Driver # MySQL 驱动,这里根据引入的 mysql-connector-java 包版本选择不同的 Driver, 8.x 需要用 cj
url: jdbc:mysql://mysql:3306/database-a?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&allowMultiQueries=true
username: root
password: 1
type: com.zaxxer.hikari.HikariDataSource # JDBC 连接池类型:HikariCP
//自定义配置
hikari:
connection-timeout: 30000 # 等待连接池分配链接的最大时长(毫秒),超过这个时长还没有可用的连接则发生 SQLException,默认:30 秒
minimum-idle: 5 # 最小连接数
maximum-pool-size: 20 # 最大连接数
auto-commit: true # 自动提交
idle-timeout: 600000 # 连接超时的最大时长(毫秒),超时则被释放(retired),默认:10 分钟
pool-name: DataSourceHikariCP # 连接池名称
max-lifetime: 1800000 # 连接的生命时长(毫秒),超时而且没被使用则被释放(retired),默认: 30 分钟
connection-test-query: select 1
配置参数说明
- 使用率较高
autoCommit:用于控制从池中返回连接的默认自动提交行为,默认为true
connectionTimeout:客户端等待池中连接的最大时间(毫秒),超时则会抛出 -SQLException,最低可接受时间为 250ms,默认值为30000ms
idleTimeout:池中连接保持空闲状态的最长时间,只有在定义的minimumIdle 小于- – maximumPoolSize时生效,允许的最小时间为 10000ms。默认为 600000ms
keepaliveTime:用于控制 HikariCP 中空闲线程的最大存活时间,该值必须小于- - - - maxLifetime,最小为 30000ms。默认为 0 (disabled)
maxLifetime:控制连接池中连接的最长时间,正在使用的连接不会被删除,只有当其关闭连接后才会被删除,当设置为 0 时表示永不删除,最小允许值为 30000ms。 默认值为 1800000ms
connectionTestQuery:当使用的驱动为 JDBC4 不建议设置该项。
minimumIdle:控制 HikariCP 中维护的最小空闲连接数。当空闲连接数小于 - - - – - minimumIdle 并且池中的总连接数少于 maximumPoolSize 时,HikariCP 将添加其他连接直到 maximumPoolSize。为了获得最佳性能和对峰值需求的响应能力建议不要设置此值。 默认值与 maximumPoolSize 相同
maximumPoolSize:连接池中的最大连接数。默认为 10
metricRegistry:该项仅在编程式配置或IoC容器中使用,允许指定一个 Codahale/Dropwizard MetricRegistry 的实例来记录池中的各项指标
healthCheckRegistry:同上,用于报告当前连接池的健康状况
poolName:定义连接池的名称,可以在日志或控制台识别连接池
- 不常使用
initializationFailTimeout:允许初始化失败的次数。默认值为 1
isolateInternalQueries:控制 HikariCP 是否在其自己的事务中隔离内部池查询,仅在禁用 autoCommit 时适用。默认值为 false
allowPoolSuspension:控制连接池是否可以通过JMX暂停和恢复,当连接池暂停时,对 getConnection() 的调用永不超时,直到连接池恢复。默认为 false
readOnly:控制从池中获取的连接是否默认为只读。默认为 false
registerMbeans:控制是否注册JMX Management Bean (MBean)。默认值为 false
catalog:为支持目录概念的数据库设置默认目录。如果未指定此属性,则使用 JDBC 驱动程序定义的默认目录。默认值为 driver default
connectionInitSql:设置一个 SQL 语句,该语句将在每次创建新连接后执行,然后再将其添加到池中。如果此 SQL 无效或引发异常,它将被视为连接失败,并且将遵循标准的重试逻辑。
driverClassName:HikariCP 将尝试通过基于 jdbcUrl 的 DriverManager 解析驱动程序,但对于一些较旧的驱动程序,必须指定 driverClassName
transactionIsolation:控制从池中返回连接的默认事务隔离级别。如果未指定此属性,则使用 JDBC 驱动定义的默认事务隔离级别。默认值为 driver default
validationTimeout:控制用于测试连接的最长存活时间,该值必须小于 - - - connectionTimeout,最短时间为 250ms。默认值为 5000ms
leakDetectionThreshold:控制在log日志记录可能发生连接泄漏的消息之前,连接可以离开池的时间。值为 0 表示禁用泄漏检测。启用泄漏检测的最低时间为 2000ms。 默认值为 0
dataSource:仅可通过编程式配置或IoC容器使用。通过此属性可以直接设置 DataSource 要由池包装的的实例,而不必让 HikariCP 通过反射进行构造
schema:为支持 schema 概念的数据库设置默认的 schema,如果未指定此属性,则使用 JDBC 驱动定义的默认模式。
threadFactory:仅可通过编程式配置或IoC容器使用。此属性允许通过 java.util.concurrent.ThreadFactory 创建池使用的所有线程
scheduledExecutor:仅可通过编程式配置或IoC容器使用。此属性允许通过 java.util.concurrent.ScheduledExecutorService 设置实将用于各种内部任务的调度。
猜你喜欢
- 2024-11-03 牛津阅读树陪读:5-9 vanishing cream
- 2024-11-03 SpringCloud学习 - 浅谈微服务架构
- 2024-11-03 什么是微服务?(什么是微服务功能)
- 2024-11-03 对开源框架跃跃欲试,却在写的时候犯了难?
- 2024-11-03 《Lost Yeti》制作团队将推新作《Drop Wizard》
- 2024-11-03 IntelliJ IDEA 如何运行 Dropwizard API
- 2024-11-03 概念篇:一篇文章让你彻底搞明白什么是微服务(值得收藏)
- 2024-11-03 Java Web应用调优线程池:没你想的那么复杂
- 2024-11-03 微服务设计 10 大反模式和陷阱!(微服务6种设计模式)
- 2024-11-03 什么是软件开发脚手架?为什么需要脚手架?常用的脚手架有哪些?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)