为什么需要数据库连接池
数据库连接池是一种用于管理数据库连接的技术
在传统的数据库连接方式中,每次与数据库建立连接都需要经过一系列的网络通信和身份验证过程,这会消耗大量的系统资源和时间
数据库连接池则通过预先创建一定数量的数据库连接并将其保存在池中,以供需要时复用,从而避免了重复建立和关闭连接的开销
优点
- 提高性能和效率:数据库连接池可以复用已经建立的数据库连接,减少了每次连接数据库的开销
- 资源管理:数据库连接池可以限制系统中同时存在的连接数量,防止数据库连接过多导致系统资源不足
- 连接复用:数据库连接池可以管理连接的生命周期,确保连接在需要时处于可用状态
- 连接池监控:数据库连接池通常提供了监控和管理的功能,可以实时监控连接的情况和性能指标
什么是Druid连接池
Druid是阿里巴巴开源的一个高性能数据库连接池
优点
- 高性能:Druid基于Java平台开发的,使用了高效的连接池算法和多线程技术,性能高
- 丰富的监控功能:提供了丰富的监控,包括连接池状态、SQL执行性能监控、SQL执行分析等
- 安全性:Druid内置了防SQL注入功能和黑名单功能
- 灵活i的配置:提供了丰富的配置选项,可以灵活地配置连接池的参数和行为
- 可扩展性:提供了插件机制,支持自定义插件和扩展功能
- 完善的文档和社区支持:有完善的官方文档和社区支持
整合Druid
添加依赖
<!-- Druid 数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-3-starter</artifactId>
<version>1.2.12</version>
</dependency>
连接池配置
application.yml
server:
port: 8080
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver # 指定数据库驱动类
# 数据库连接信息
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai
username: root # 数据库用户名
password: 123456 # 数据库密码
type: com.alibaba.druid.pool.DruidDataSource
druid: # 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 # 配置一个连接在连接池中最小生存的时间(单位:毫秒)
max-evictable-idle-time-millis: 900000 # 配置一个连接在连接池中最大生存的时间(单位:毫秒)
validation-query: SELECT 1 FROM DUAL # 配置测试连接是否可用的查询 sql
test-on-borrow: false
test-on-return: false
pool-prepared-statements: false
web-stat-filter:
enabled: true
stat-view-servlet:
enabled: true
url-pattern: /druid/* # 配置监控后台访问路径
login-username: admin # 配置监控后台登录的用户名、密码
login-password: admin
filter:
stat:
enabled: true
log-slow-sql: true # 开启慢 sql 记录
slow-sql-millis: 2000 # 若执行耗时大于 2s,则视为慢 sql
merge-sql: true
wall: # 防火墙
config:
multi-statement-allow: true
参数说明
- type: com.alibaba.druid.pool.DruidDataSource:指定使用 Druid 连接池
- initial-size:初始化连接池大小,即连接池启动时创建的初始化连接数
- min-idle:最小连接池数量,连接池中保持的最小空闲连接数
- max-active:最大连接池数量,连接池中允许的最大活动连接数
- max-wait:连接时最大等待时间,当连接池中的连接已经用完时,等待从连接池获取连接的最长时间,单位是毫秒
- test-while-idle:连接空闲时是否执行检查
- time-between-eviction-runs-millis:配置多久进行一次检测,检测需要关闭的连接,单位是毫秒
- min-evictable-idle-time-millis:一个连接在连接池中最小生存的时间,单位是毫秒
- max-evictable-idle-time-millis:一个连接在连接池中最大生存的时间,单位是毫秒
- validation-query:测试连接是否可用的查询 SQL
- test-on-borrow:连接从连接池获取时是否测试连接的可用性
- test-on-return:连接返回连接池时是否测试连接的可用性
- pool-prepared-statements:是否缓存 PreparedStatement,默认为 false
- web-stat-filter:用于配置 Druid 的 Web 监控功能。在这里,enabled表示是否开启 Web 监控功能。如果设置为 true,就可以通过浏览器访问 Druid 的监控页面
stat-view-servlet:配置 Druid 的监控后台访问路径、登录用户名和密码
- enabled 表示是否开启监控后台功能
- url-pattern\`指定了监控后台的访问路径,即通过浏览器访问监控页面时的 URL
- login-username和 login-password分别指定了监控后台的登录用户名和密码,用于访问监控后台时的身份验证
filter:用于配置 Druid 的过滤器,包括统计过滤器和防火墙过滤器
- stat:配置 Druid 的统计过滤器。enabled 表示是否开启统计功能,log-slow-sql表示是否开启慢 SQL 记录,slow-sql-millis指定了执行时间超过多少毫秒的 SQL 语句会被认为是慢 SQL,merge-sql 表示是否开启 SQL 合并功能
- wall:配置 Druid 的防火墙过滤器。防火墙用于防止 SQL 注入攻击。在这里,config 配置了防火墙的规则,multi-statement-allow 表示是否允许执行多条 SQL 语句
监控后台
访问:localhost:8080/druid