欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > Spring-关于spring数据库连接池的理解

Spring-关于spring数据库连接池的理解

2024/10/23 23:25:50 来源:https://blog.csdn.net/weixin_43834477/article/details/142913835  浏览:    关键词:Spring-关于spring数据库连接池的理解

连接池的工作流程
1、当线程需要执行数据库操作时,它会从连接池中请求一个可用的连接。
2、如果当前连接数未达到最大连接数(即没有超过 maximum-pool-size),连接池会分配一个新的连接给该线程。
3、如果当前连接数已经达到最大连接数,线程将进入等待状态,直到有连接可用或者超时。
4、当连接使用完毕后,线程将释放连接回到连接池中,使得其他等待的线程可以获取连接。

数据库连接池的配置,并不是越多越好,最大在(cpu*2 +1)因为越多的话就会有越多的线程拿到,这就会涉及到线程的cpu切换。

数据库连接池一般使用第三方集成的连接池,例如 HikariCP, DBCP或者C3P0。
springboot一般使用HikariCP,使用方式:引入’spring-boot-starter-data-jpa’或者’spring-boot-starter-jdbc’等启动器,当然也可以引入其他的数据库连接池。mybatis plus中就默认集成了spring-boot-starter-jdbc,所以当引入mybatis plus后就不必再额外引入数据库连接池

数据库连接池的好处:

性能提升: 连接池可以在应用程序启动时创建一定数量的数据库连接,这些连接在需要时被重复利用,避免了频繁地创建和销毁连接。这样可以减少连接的建立和断开的开销,提升了数据库访问的性能。
资源重用: 连接池会维护一定数量的数据库连接,这些连接可以被多个线程共享。通过共享连接,可以更有效地利用数据库资源,降低了系统的资源消耗。
连接的管理和维护: 连接池可以管理连接的状态,包括连接的打开和关闭,以及对连接的空闲时间进行监控。这有助于防止连接的泄漏,同时确保连接在空闲时被正确关闭,释放数据库资源。
连接的限制和控制: 连接池可以限制连接的数量,防止因为连接数过多导致数据库性能下降。通过连接池配置的参数,可以更好地控制连接的使用情况,包括超时时间、最大连接数等。
性能调优: 一些数据库连接池还提供了性能调优的功能,比如连接的预热、连接的健康检查等,这有助于提高数据库连接的稳定性和性能。
避免了频繁的连接和断开: 数据库连接的创建和销毁是比较昂贵的操作,使用连接池避免了频繁的连接和断开,减少了系统开销。

数据库连接池种类:HikariDBCP
HikariCP 是一个高性能的 JDBC 连接池,它具有快速、轻量级、可靠的特点。在 Spring Boot 中,默认使用 HikariCP 作为数据源的连接池
以springboot2.x为例:
在 Spring Boot 项目中,如果没有显式地配置数据库连接池,Spring Boot 会使用默认的连接池。默认情况下,Spring Boot 2.x 使用的是 HikariCP 作为默认的连接池。如果项目中没有添加其他的连接池依赖,并且没有显式地配置数据库连接池相关属性,Spring Boot 将会使用默认的 HikariCP 连接池,并采用一组合理的默认配置。

以下为springboot2.x的数据库连接池默认配置:

spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.idle-timeout=600000

  • maximum-pool-size:连接池的最大连接数,默认为 10。
  • minimum-idle:连接池的最小空闲连接数,默认为 10。
  • connection-timeout:连接超时时间,默认为 30 秒。
  • idle-timeout:连接空闲超时时间,默认为 10 分钟

配置参数:
maximum-pool-size:连接池最大连接数

minimum-idle:连接池最小连接数
注:动态保持的,并非一直不低于此值

idle-timeout:连接空闲超时时间
注:指的是在链接在数据库连接池中的空闲时间

max-lifetime:连接最大生命周期
注:指的是链接从创建到销毁的整个生命周期,包括链接在连接池中的空闲时间

connection-timeout:获取连接超时时间
注意:从数据库连接池中拿取连接的时间,如果此时线程数超过设置的最大连接数,则会等待,若connect-timeout设置时间内一直拿不到则会报连接超时异常。

min-idle:数据库连接池创建的时候,会尽量保持
注意:可能会低于这个值,如果多个连接超过设置的idle-timeout空闲超时时间,会被移除,所以可能会导致池中连接低于设置的min-idle最小连接数,但是如果设置了可自动创建,那么连接池会自动创建,尽量的保持住min-idle

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com