Springboot使用数据库连接池druid
springboot框架中可以使用druid进行数据库连接池,下面介绍druid在springboot中使用和参数配置介绍。
数据库连接池(Druid)是一种用于管理数据库连接的机制,其工作原理和常见使用方法如下:
- 原理:数据库连接池通过预先建立一定数量的数据库连接,并在程序需要时重复使用这些已存在的连接,而不是每次都新建一个,从而避免了频繁创建和销毁数据库连接带来的开销。这种技术可以显著提高系统的响应速度并减少资源消耗。连接池中的连接数量通常由最大连接数和最小连接数来控制,以达到最佳的性能和资源利用率。
- 使用步骤:
- 定义配置文件:首先,需要定义Druid的配置文件,例如
druid.properties
,在其中配置数据库的相关信息,如URL、用户名、密码等。 - 编程实例:在代码中实例化Druid数据源,然后通过这个数据源获取数据库连接。
- 自定义JDBC工具类:创建一个工具类来封装数据库连接的获取和释放操作,以便在程序中重复使用。
- 配置参数:Druid连接池提供了丰富的配置参数,包括最大连接数、最小连接数、空闲连接的保持时间等,以便根据实际需求进行优化。
- 常见问题:在使用过程中,可能遇到一些问题,如连接泄漏、SQL注入等,需要注意防范和解决。
总之,数据库连接池技术是提高系统性能和资源利用率的重要手段,Druid作为其中的一种实现,提供了丰富的功能和灵活的配置选项。在使用过程中,需要注意配置和优化,并根据具体情况选择合适的连接池大小和保持策略。
在springboot中的使用
1、maven中引入依赖
<dependency> <groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>${druid.version}</version>
</dependency>
2、druid配置项和解析
spring:datasource:druid:# 指定数据源类型为DruidDataSourcetype: com.alibaba.druid.pool.DruidDataSource# 数据库连接URLurl: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false# 数据库用户名username: root# 数据库密码password: "xx123!@#"# 连接池初始化时创建的连接数initialSize: 5# 连接池中最大连接数maxActive: 50# 连接池中最小空闲连接数minIdle: 5# 连接池中最大空闲连接数maxIdle: 10# 获取连接时的最大等待时间(毫秒)maxWait: 60000# 间隔多久检测一次空闲连接(毫秒)timeBetweenEvictionRunsMillis: 60000# 连接池中连接最小空闲时间(毫秒)minEvictableIdleTimeMillis: 300000# 用于检测连接是否有效的SQL语句validationQuery: SELECT 1# 是否开启空闲连接的检测testWhileIdle: true# 是否开启连接的检测功能,在获取连接时检测连接是否有效testOnBorrow: false# 是否开启连接的检测功能,在归还连接时检测连接是否有效testOnReturn: false# 是否缓存PreparedStatement对象poolPreparedStatements: true# 缓存PreparedStatement对象的最大数量maxPoolPreparedStatementPerConnectionSize: 20# 配置监控统计用的filter,允许监控统计filters: stat# 配置扩展属性,用于监控统计分析SQL性能等
2、url: 数据库连接的URL。
注意事项:需要根据实际情况修改URL。
3、username: 数据库用户名。
4、password: 数据库密码
包含一些特殊字符的时候需要加引号。
5、initialSize: 连接池初始化时创建的连接数。
需要根据实际情况设置连接数。连接池创建连接时,会创建initialSize个连接,以确保应用程序在启动时可以立即获取到数据库连接。
6. maxActive: 连接池中最大连接数。需要根据实际情况设置最大连接数。如果连接池中连接数达到maxActive,则应用程序获取连接的请求将被阻塞,直到有连接被释放。
7. minIdle: 连接池中最小空闲连接数。 需要根据实际情况设置最小空闲连接数。如果连接池中空闲连接数少于minIdle,连接池会创建新的连接以达到minIdle。
8. maxIdle: 连接池中最大空闲连接数。 需要根据实际情况设置最大空闲连接数。如果连接池中空闲连接数超过maxIdle,连接池会关闭多余的连接以避免占用过多的资源。
9. maxWait: 获取连接时的最大等待时间。需要根据实际情况设置最大等待时间。如果连接池中没有可用连接且已经达到最大连接数,则应用程序获取连接的请求将被阻塞,最多等待maxWait毫秒。
10. timeBetweenEvictionRunsMillis: 间隔多久检测一次空闲连接(毫秒)。 需要根据实际情况设置检测间隔时间。连接池会定期检查空闲连接的状态,如果空闲时间超过minEvictableIdleTimeMillis,则将连接关闭。
11. minEvictableIdleTimeMillis: 连接池中连接最小空闲时间(毫秒)。 需要根据实际情况设置最小空闲时间。连接池会定期检查空闲连接的状态,如果空闲时间超过minEvictableIdleTimeMillis,则将连接关闭。
12. validationQuery: 用于检测连接是否有效的SQL语句。 需要根据实际情况设置SQL语句。连接池会使用这个SQL语句来检测连接是否有效。
13. testWhileIdle: 是否开启空闲连接的检测。 需要根据实际情况设置是否开启空闲连接的检测。如果开启,连接池会定期检查空闲连接的状态。
14. testOnBorrow: 是否开启连接的检测功能,在获取连接时检测连接是否有效。
需要根据实际情况设置是否开启连接的检测功能。如果开启,连接池在获取连接时会检查连接是否有效。
15. testOnReturn: 是否开启连接的检测功能,在归还连接时检测连接是否有效。 需要根据实际情况设置是否开启连接的检测功能。如果开启,连接池在归还连接时会检查连接是否有效。
16. poolPreparedStatements: 是否缓存PreparedStatement对象。需要根据实际情况设置是否缓存PreparedStatement对象。如果开启,连接池会缓存PreparedStatement对象以提高性能。
17. maxPoolPreparedStatementPerConnectionSize: 缓存PreparedStatement对象的最大数量。 需要根据实际情况设置缓存的最大数量。如果开启了缓存PreparedStatement对象,连接池会限制每个连接缓存的最大数量。
maxPoolPreparedStatementPerConnectionSize是Druid连接池的一个配置项,用于配置连接池中缓存的PreparedStatement的最大数量。PreparedStatement是预编译的SQL语句,可以提高SQL执行的效率和安全性,避免SQL注入等安全问题。在使用Druid连接池时,当开启了缓存PreparedStatement功能时,每个连接都会缓存一定数量的PreparedStatement对象,以便在需要执行SQL语句时能够快速获取。而maxPoolPreparedStatementPerConnectionSize就是用于配置每个连接中缓存的PreparedStatement的最大数量。需要注意的是,缓存PreparedStatement虽然可以提高SQL执行的效率,但同时也会占用一定的内存资源。因此,需要根据实际情况进行合理配置。默认情况下,该属性的值为10。在上面的配置中,maxPoolPreparedStatementPerConnectionSize: 20表示将每个连接中缓存的PreparedStatement的最大数量设置为20个。
18. filters: 配置监控统计用的filter,允许监控统计。 如果要使用Druid的监控功能,需要配置此项。stat表示使用Druid的监控功能。
19. connectionProperties: 配置扩展属性,用于监控统计分析SQL性能等。 druid.stat.mergeSql和druid.stat.slowSqlMillis是两个与SQL监控有关的属性。
druid.stat.mergeSql用于配置是否合并SQL。当该属性设置为true时,Druid会将相同的SQL语句合并为一条,以节省SQL统计的开销和提高统计精度。默认情况下,该属性的值为false。
druid.stat.slowSqlMillis用于配置SQL执行的时间阈值,单位为毫秒。当一条SQL执行的时间超过该阈值时,Druid会将该SQL记录到慢SQL列表中,以便进行分析和优化。默认情况下,该属性的值为3000毫秒。
相关文章:

Springboot使用数据库连接池druid
springboot框架中可以使用druid进行数据库连接池,下面介绍druid在springboot中使用和参数配置介绍。 数据库连接池(Druid)是一种用于管理数据库连接的机制,其工作原理和常见使用方法如下: 原理:数据库连接…...

Springboot-前后端分离——第三篇(三层架构与控制反转(IOC)-依赖注入(DI)的学习)
本篇主要对ControllerServiceDAO三层结构以及控制反转(IOC)与DI(依赖注入)进行总结。 目录 一、三层架构: Controller/Service/DAO简介: 二、控制反转(IOC)-依赖注入(DI): 概念介绍: DOC与…...

Open CASCADE学习|曲面上一点的曲率及切平面
曲率(Curvature)是一个几何学的概念,用于描述一个物体的形状在某一点上的弯曲程度。在我们日常生活中,曲率与我们的生活息息相关,如道路的弯道、建筑物的拱形结构、自然界的山脉等等。了解曲率的概念和计算方法&#x…...

CentOS 8最小安装和网络配置
文章目录 简介下载地址VMware 17创建虚拟机最小化安装拥有的外部命令yum源有问题网络配置开启SSH Server服务关闭防火墙设置host配置JDK环境完整参考 简介 CentOS 8的IOS如果下载DVD版本至少有10G 这里我们直接选择最小安装,因此选择最小系统boot版本 CentOS-8.5.21…...

【代码随想录-链表】环形链表 II
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…...

Redis核心技术与实战【学习笔记】 - 7.Redis GEO类型 - 面向 LBS 应用的数据类型
前言 前面,介绍了 Redis 的 5 大基本数据类型:String、List、Hash、Set、Sorted Set,它们可以满足绝大多数的数据存储需求,但是在面对海里数据统计时,它们的内存开销很大。所以对于一些特殊的场景,它们是无…...

银行数据仓库体系实践(17)--数据应用之营销分析
营销是每个银行业务部门重要的工作任务,银行产品市场竞争激烈,没有好的营销体系是不可能有立足之地,特别是随着互联网金融发展,金融脱媒”已越来越普遍,数字化营销方兴未艾,银行的营销体系近些年也不断发展,…...

Linux一键部署telegraf 实现Grafana Linux 图形展示
influxd2前言 influxd2 是 InfluxDB 2.x 版本的后台进程,是一个开源的时序数据库平台,用于存储、查询和可视化时间序列数据。它提供了一个强大的查询语言和 API,可以快速而轻松地处理大量的高性能时序数据。 telegraf 是一个开源的代理程序,它可以收集、处理和传输各种不…...

C/C++ C++入门
个人主页:仍有未知等待探索-CSDN博客 专题分栏:C_仍有未知等待探索的博客-CSDN博客 目录 一、C关键字 二、命名空间 1、区别 1. C语言 编辑 2. C 2、命名空间定义 3、命名空间的使用 三、C输入&输出 四、缺省参数 五、函数重载 六、引用 …...
【后端】乐观锁和悲观锁
前置知识点 锁:一种确保数据安全的机制和手段。 在多个线程修改共享变量时,我们可以对修改操作进行加锁。当多个用户修改表中的同一数据时,我们可以对该行数据进行加锁(行锁)。锁是用于控制多个操作在并发环境下按顺…...
软件工程知识梳理1-可行性研究
目的:确定问题是否值得去解决。就是用最小的代价在尽可能短的时间内确定问题是否能够解决。 可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程,也即是在较高层次上以较抽象的方式进行系统分析和设计的过程。 考察点:技术可…...

2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码
2024美国大学生数学建模E题财产保险的可持续模型详解思路具体代码 前言 很快啊!啪的一下拿到题目就开始做题!简单介绍一下我自己:博主专注建模五年,参与过大大小小数十来次数学建模,理解各类模型原理以及每种模型的建…...
pytorch nearest upsample整数型tensor
在用 torch.nn.Upsample 给分割 label 上采样时报错:RuntimeError: "upsample_nearest2d_out_frame" not implemented for Long。 参考 [1-3],用 [3] 给出的实现。稍微扩展一下,支持 h、w 用不同的 scale factor,并测试…...

MySQL的SQL MODE
目录 举例: --常见SQL mode --mysql8 sql_mode 官方文档 https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html --查看全局的SQL MODE select global.sql_mode; --查看当前会话的SQL MODE select session.sql_mode; --运行时修改全局的SQL mode set gl…...
GO EASY 框架 之 NET 05
目录 1、Overview 2、Agent接口源码 3、收发消息 4、AgentHandle接收函数 5、conns.Conn接口 1、Overview 名称:agent.Agent 网络链接 接口; DESC:网络链接,服务端与客户端通信媒介; 封装:进一步封…...

【教程】谈一谈 IPA 上传到 App Store Connect 的几种方法
【教程】谈一谈 IPA 上传到 App Store Connect 的几种方法 引言 在应用开发过程中,将应用程序上传到 App Store Connect 是一个关键的环节。本文将探讨几种常见的 IPA 文件上传方法,包括 Xcode、Application Loader、altool、Appuploader以及Transport…...

面试经典 150 题 -- 滑动窗口 (总结)
面试经典150题链接 面试经典 150 题 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台 209 . 长度最小的子数组 思路 : 滑动窗口的思想,取ij0,向后遍历j,记录前缀和[l,r]为s,如果s>target,那么左端点向右移动,直到s…...
JDK8对List对象根据属性排序
文章目录 JDK8对List对象根据属性排序1. 被排序字段为null或者空时候报错2. 使用Stream流排序2.1 根据name升序2.2 根据name升序,score降序 3. 使用Collections排序3.1 根据name升序3.2 根据name升序,score降序 4. 完整的demo JDK8对List对象根据属性排序…...

【2024美国大学生数学建模竞赛】2024美赛C题网球运动中的势头,网球教练4.0没人比我更懂这个题了!!!
【2023美国大学生数学建模竞赛】2024美赛C题 问题分析、数学模型、实现代码、完整论文 引言 本人是计算机博士,拥有10年网球球龄,2023年的温网决赛,熬夜到半夜全称观看完了直播,对于网球规则、比赛的数据非常熟悉,这个…...
python的Flask生产环境部署说明照做成功
最近刚好在我的Linux服务器上部署一个Web服务, 使用了python的Flask框架, 因此本文主要介绍flask在linux环境上的部署。 Flask 是一个轻量级的 Python Web 框架,非常适合快速开发小型到中型的 Web 应用。然而,Flask 自带的服务器通常是用于开发目的&…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...
WEB3全栈开发——面试专业技能点P4数据库
一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库,基于 mysql 库改进而来,具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点: 支持 Promise / async-await…...
32位寻址与64位寻址
32位寻址与64位寻址 32位寻址是什么? 32位寻址是指计算机的CPU、内存或总线系统使用32位二进制数来标识和访问内存中的存储单元(地址),其核心含义与能力如下: 1. 核心定义 地址位宽:CPU或内存控制器用32位…...

Axure零基础跟我学:展开与收回
亲爱的小伙伴,如有帮助请订阅专栏!跟着老师每课一练,系统学习Axure交互设计课程! Axure产品经理精品视频课https://edu.csdn.net/course/detail/40420 课程主题:Axure菜单展开与收回 课程视频:...