druid数据库连接池配置项说明

目录

一、druid简介

二、引入druid数据库连接池

三、druid数据库连接池配置项说明

1. initialSize

2.maxWait

3.validationQuery

4.testWhileIdle,testOnBorrow,testOnReturn

5.timeBetweenEvictionRunsMillis

6.minEvictableIdleTimeMillis

7.validationQueryTimeout


一、druid简介

druid 是一个由阿里巴巴开发的 JDBC 连接池,广泛用于 Java 应用中。druid 特别注重监控,提供了强大的监控和扩展功能,包括详细的 SQL 统计、数据库连接池状态监控等。

二、引入druid数据库连接池

使用springboot集成druid数据库连接池。

引入依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.8</version>
</dependency>

配置文件样例:

spring:
  # 数据库连接配置
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/db1
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      initial-size: 5
      min-idle: 5
      max-active: 20
      max-wait: 60000
      test-while-idle: true
      time-between-eviction-runs-millis: 60000
      min-evictable-idle-time-millis: 300000
      validation-query: SELECT 1
      test-on-borrow: false
      test-on-return: false

三、druid数据库连接池配置项说明

下面对每个配置项的具体含义进行说明。

1. initialSize

初始化连接数:连接池启动时创建的初始化连接数量,默认值0 初始连接数,这里的初始指的是第一次getConnection的时候,而不是应用启动的时候。 这就是为什么第一次进行数据库操作的时候,响应会比较慢的原因,创建数据库连接是很耗时的,所以初始化连接并不是越多越好,配置过大容易导致服务发布首次请求出现大量超时。

案例一:

initialSize=0(不配置默认为0)

这种配置会导致服务启动时,大量请求进来没有足够的连接使用而去获取链接,导致出现很多获取连接超时异常。

案例二:

initialSize=100

maxActive=100

这种配置会导致服务启动后首次请求响应会比较慢,可能会导致超时。

2.maxWait

参数表示从连接池获取连接的超时等待时间,单位毫秒,需要注意这个参数只管理获取连接的超时。获取连接等待的直接原因是池子里没有可用连接,具体包括:连接池未初始化,连接长久未使用已被释放,连接使用中需要新建连接,或连接池已耗尽需等待连接用完后归还。这里有一个很关键的点是 maxWait 未配置或者配置为 0 时,表示不设等待超时时间。

案例一

maxWait=0

正常流量下业务没有发现任何问题,但突发大流量涌入时,造成连接池耗尽,所有新增的DB请求处于等待获取连接的状态中。由于 maxWait=0 表示无限等待,在请求速度大于处理速度的情况下等待队列会越排越长,最终业务上的表现就是业务接口大量超时甚至可能打满容器线程造成服务不可用,流量越大造成实际吞吐量反而越低。

推荐配置: 内网(网络状况好) 1200ms。网络状况不是特别好的情况下推荐大于等于 1200ms,因为tcp 建连重试一般是 1 秒。

3.validationQuery

当Druid遇到testWhileIdle,testOnBorrow,testOnReturn时,就会验证连接的有效性,验证规则如下:
如果有相关数据库的ValidConnectionChecker,则使用ValidConnectionChecker验证(Druid提供常用数据库的ValidConnectionChecker,包括MSSQLValidConnectionChecker,MySqlValidConnectionChecker,OracleValidConnectionChecker,PGValidConnectionChecker)。如果没有ValidConnectionChecker,则直接使用validationQuery验证。

Druid用来测试连接是否可用的SQL语句,默认值每种数据库都不相同:
Mysql:SELECT 1;
SQLSERVER:SELECT 1;
ORACLE:SELECT 'x' FROM DUAL;
PostGresql:SELECT 'x';

4.testWhileIdle,testOnBorrow,testOnReturn

testWhileIdle,这一项官方建议设置为true,如果testOnBorrow没有被置为true,则会进行testWhileIdle的检查,检查时会判断当前连接对象距离上次被使用的时间是否超过规定检查的时间,若超过,则进行检查一次,这个检查时间通过timeBetweenEvictionRunsMillis来控制,默认60s。

testOnBorrow,官方不建议设置testOnBorrowtrue,默认为false,如果开启了testOnBorrow,则每次请求都会去测试连接是否可用,会极大影响服务性能。

testOnReturn,这个跟testOnBorrow一样,官方默认不开启,也不建议开启,影响性能,理由参考对testOnBorrow的解释。

5.timeBetweenEvictionRunsMillis

作为验证连接是否有效的时间周期,如果testOnBorrow==false并且testWhileIdle==true,则在应用获取连接的时候会判断连接的空闲时间是否大于timeBetweenEvictionRunsMillis,如果大于则会验证该连接是否有效。

6.minEvictableIdleTimeMillis

连接池中连接可空闲的时间。

timeBetweenEvictionRunsMillis和minEvictableIdleTimeMillis一起使用,每timeBetweenEvictionRunsMillis毫秒检查一次连接池中空闲的连接,

把空闲时间超过minEvictableIdleTimeMillis毫秒的连接断开,直到连接池中的连接数到minIdle为止主要把这两个参数加上就好。

7.validationQueryTimeout

validationQueryTimeout仅控制validationQuery的超时。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/573184.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux 驱动-匹配2 (amba_bustype)

目录 1.实例分析 a. 设备树实例 b. 驱动实例 2. amba匹配流程 a. 创建amba_device b. 确定总线以及总线的匹配函数 c. 分析总线的匹配函数 1.实例分析 a. 设备树实例 serial7e201000 { compatible "brcm,bcm2835-pl011\0arm,pl011\0arm,primecell"; //创建am…

Nginx 四层和七层代理区别、配置

四层&#xff1a;通过报文中的目标地址和端口&#xff0c;加上负载均衡设备设置的服务器选择方式&#xff0c;决定最终选择的内部服务器&#xff0c;使用tcp、udp协议。 七层&#xff1a;"内容交换"&#xff0c;通过报文中真正有意义的应用层内容&#xff0c;加上负…

【vue,unapi】UniApp引入全局js实现全局方法,全局变量

创建一个全局文件utils.js export const baseUrl "https://www.baidu.com/"export const fn () > {console.log("demo"); } export const obj {baseUrl : "https://www.baidu.com/",demo(){console.log("demo2");} }第一种&#…

基于opencv的单目相机标定

openCv版本&#xff1a;4.4.0 从源码处拷贝标定代码出来使用&#xff0c;需要拷贝samples/cpp/tutorial_code/calib3d/camera_calibration 需要的文件如下&#xff1a; -rw-rw-r-- 1 rog rog 28490 Jul 18 2020 camera_calibration.cpp -rw-rw-r-- 1 rog rog 3152 Jul 18 …

LearnOpenGL(五)之变换

一、缩放&#xff08;Scaling&#xff09; 把缩放变量表示为 (S1,S2,S3)&#xff0c; 将任意向量 (x,y,z) 定义一个缩放矩阵&#xff0c;缩放公式&#xff1a; 二、位移 和缩放矩阵一样&#xff0c;在44矩阵上有几个特别的位置用来执行特定的操作&#xff0c;对于位移来说它们…

通过matlab对比遗传算法优化前后染色体的变化情况

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 通过matlab对比遗传算法优化前后染色体的变化情况. 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 3.核心程序 ....................................…

JVM(Java虚拟机)练习题目大全

1、什么是Java虚拟机&#xff08;JVM&#xff09;&#xff1f;它的作用是什么&#xff1f; Java虚拟机是Java平台的关键组件之一&#xff0c;它是一个能够执行Java字节码的虚拟计算机。其作用是提供一个跨平台的运行环境&#xff0c;使得Java程序可以在不同的操作系统上运行&a…

javaEE初阶——多线程(九)——JUC常见的类以及线程安全的集合类

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 小比特 大梦想 此篇文章与大家分享多线程专题的最后一篇文章:关于JUC常见的类以及线程安全的集合类 如果有不足的或者错误的请您指出! 目录 3.JUC(java.util.concurrent)常见的类3.1Callable接口3.2 RentrantLoc…

5月计算机各省报名时间汇总报名流程

&#x1f4e3;5月有5省可进行计算机报名 天津&#xff1a;5月6日-5月10日 福建&#xff1a;5月6日9:00-5月12日17:00 广西&#xff1a;5月6日9:00-5月12日23:55 重庆&#xff1a;5月6日9:00-5月12日24:00 西藏&#xff1a;预计5月6日-12日 &#x1f50d;计算机等级考试报…

【智能算法应用】灰狼算法(GWO)在低照度图像增强中的应用

目录 1.算法原理2.数学模型3.结果展示4.参考文献 1.算法原理 【智能算法】灰狼算法&#xff08;GWO&#xff09;原理及实现 2.数学模型 对于低照度图像的增强方式可以采用非线性变换函数来对图像的灰度值进行变化&#xff0c;对于不同环境下质量不同的图像&#xff0c;可以将…

Flink 实时数仓(一)【实时数仓离线数仓对比】

前言 昨天技术面的时候&#xff0c;面试官说人家公司现在用的都是最新的技术&#xff0c;比如 Doris 等一些最新的工具&#xff0c;确实这些课是学校永远不会开设的&#xff0c;好在他说去了会带着我做一做。可是 ...... 学院舍不得让走啊 ...... 没办法&#xff0c;情况就是这…

LVGL基础到进阶

GUI 简介 图形用户界面&#xff0c; 是指代采用图形方式现实的计算机操作用户界面 GUI库&#xff1a; 图形用户界面库&#xff0c;只需调用GUI库的函数就看也i快速绘制出所需要的用户界面 优势&#xff1a; 开发难度低可移植性风格统一、协调 常见GUI库 emVinLVGLtouchGF…

传统行业还在使用FTP传输?试试这套FTP替代传输解决方案!

在数字化转型的浪潮中&#xff0c;传统企业对文件传输的需求日益增长。然而&#xff0c;许多企业仍在使用传统的文件传输协议&#xff08;FTP&#xff09;来处理文件传输任务。尽管FTP在早期被广泛采用&#xff0c;但其固有的弊端逐渐成为企业发展的桎梏&#xff0c;所以找一个…

如何从requirements.txt文件中安装pytorch

平时使用requirements.txt文件来安装python的依赖&#xff0c;如下所示&#xff1a; Flask3.0.0 Flask-Cors4.0.0 elastic-transport8.11.0 elasticsearch8.11.1但是如果我们的依赖中包含pytorch依赖&#xff0c;显然是不能简单的通过这个方式来进行的&#xff0c;例如&#x…

VXWorks6.9 + Workbench3.3 Simulation 编译静态库项目搭建和编译

VxWorks系列传送门 一、 创建一个static keneral Library项目 二、添加带编译的文件 浅写两个接口如下: /** testlib.h** Created on: 2024-4-25* Author: Administrator*//** Description:*/

安装 Nginx 的三种方式

通过 Nginx 源码安装需要提前准备的内容&#xff1a; GCC 编译器 Nginx 是使用 C 语言编写的程序&#xff0c;因此想要运行 Nginx 就需要安装一个编译工具 GCC 就是一个开源的编译器集合&#xff0c;用于处理各种各样的语言&#xff0c;其中就包含了 C 语言 使用命令 yum i…

4.8 海思SS928开发 - uboot开发 - 自定义启动以及分区方案验证

4.8 uboot开发 - 自定义启动以及分区方案验证 上文中自定义了分区方案以及启动方案。但还没有验证过能不能用&#xff0c;这里验证一下。 制作镜像 步骤如下&#xff1a; cd ~/hiss928/uboot/ss928_uboot_v2020.1/ source ~/hiss928/sdk/ss928_sdk_g7.3_k4.19/env_setup.sh .…

IntelliJ IDEA - 10 款 IDEA 宝贝插件,YYDS!

好久没发这种实用贴了&#xff0c;最近用到了一些能提升工作效率的IDEA插件&#xff0c;给小伙伴们分享一下。相信我&#xff0c;我分享的这些插件&#xff0c;都是实实在在能解决实际开发场景中痛处的。 1、POJO to JSON 开发工作中&#xff0c;常常在设计完API后&#xff0c…

汽车驾驶3D模拟仿真展示系统更立体直观

随着新能源汽车的普及&#xff0c;它已成为现代生活中不可或缺的交通工具。并且国产车的崛起&#xff0c;其设计与零部件制造水平已能与合资车相媲美&#xff0c;因此汽车维修技能的学习变得尤为重要。汽车维修3D仿真教学软件应运而生&#xff0c;为广大学员提供了一个直观、高…

C语言 | Leetcode C语言题解之第47题全排列II

题目&#xff1a; 题解&#xff1a; int* vis;void backtrack(int* nums, int numSize, int** ans, int* ansSize, int idx, int* perm) {if (idx numSize) {int* tmp malloc(sizeof(int) * numSize);memcpy(tmp, perm, sizeof(int) * numSize);ans[(*ansSize)] tmp;return…