数据访问是后端项目的核心。本文将带你整合 mysql 与 druid 连接池,详解自动配置原理、监控配置、多数据源与生产级调优,帮你彻底搞定 spring boot 4 的数据源配置。
一、spring boot 4 数据源自动配置原理
自动配置类
spring boot 4 的数据源自动配置核心类:
org.springframework.boot.autoconfigure.jdbc.datasourceautoconfiguration
它做了什么?
- 根据 classpath 中的 jdbc 驱动,自动创建
datasource - 绑定
spring.datasource.*配置 - 支持 hikaricp(默认)、druid、tomcat jdbc 等
默认连接池:hikaricp
spring boot 4 默认使用 hikaricp,性能极高。
为什么还要用 druid?
- druid 提供监控页面
- 支持 sql 防火墙
- 提供 慢 sql 日志
- 企业级功能更丰富
二、整合 mysql + druid 实战
引入依赖
<dependencies>
<!-- web -->
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-web</artifactid>
</dependency>
<!-- mysql 驱动(spring boot 4 默认 8.x+) -->
<dependency>
<groupid>com.mysql</groupid>
<artifactid>mysql-connector-j</artifactid>
<scope>runtime</scope>
</dependency>
<!-- druid starter(重点) -->
<dependency>
<groupid>com.alibaba</groupid>
<artifactid>druid-spring-boot-3-starter</artifactid>
<version>1.2.23</version>
</dependency>
<!-- jdbc(可选,后续 jpa/mybatis 会引入) -->
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-jdbc</artifactid>
</dependency>
</dependencies>注意:spring boot 4 对应使用 druid-spring-boot-3-starter(兼容 4.x)
基础配置(application.yml)
spring:
datasource:
type: com.alibaba.druid.pool.druiddatasource
driver-class-name: com.mysql.cj.jdbc.driver
url: jdbc:mysql://localhost:3306/test_db?useunicode=true&characterencoding=utf-8&servertimezone=asia/shanghai&usessl=false
username: root
password: root
# druid 专属配置
druid:
# 连接池配置
initial-size: 5
min-idle: 5
max-active: 20
max-wait: 60000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
validation-query: select 1
test-while-idle: true
test-on-borrow: false
test-on-return: false
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
# 监控配置
stat:
merge-sql: true
slow-sql-millis: 5000验证数据源
@restcontroller
public class datasourcecontroller {
@autowired
private datasource datasource;
@getmapping("/ds")
public string datasource() {
return datasource.getclass().getname();
}
}访问 /ds,返回:
com.alibaba.druid.pool.druiddatasource
整合成功!
三、druid 监控配置(生产级)
配置监控页面
@configuration
public class druidconfig {
@bean
public servletregistrationbean<statviewservlet> druidstatviewservlet() {
servletregistrationbean<statviewservlet> registration =
new servletregistrationbean<>(new statviewservlet(), "/druid/*");
// 登录用户名密码
registration.addinitparameter("loginusername", "admin");
registration.addinitparameter("loginpassword", "admin123");
registration.addinitparameter("resetenable", "false");
return registration;
}
@bean
public filterregistrationbean<webstatfilter> druidwebstatfilter() {
filterregistrationbean<webstatfilter> registration =
new filterregistrationbean<>(new webstatfilter());
registration.addurlpatterns("/*");
registration.addinitparameter("exclusions", "*.js,*.css,/druid/*");
return registration;
}
}访问:http://localhost:8080/druid
输入用户名密码:admin / admin123
druid 监控页面启动成功!
监控页面能看什么?
| 页面 | 功能 |
|---|---|
| 数据源 | 连接池状态、活跃连接数 |
| sql 监控 | sql 执行次数、耗时、慢 sql |
| sql 防火墙 | 非法 sql 拦截 |
| web 应用 | uri 访问统计 |
| session 监控 | 在线 session |
| spring 监控 | bean 方法执行统计 |
四、druid 连接池参数调优(重点)
核心参数对照表
| 参数 | 说明 | 推荐值 |
|---|---|---|
initial-size | 初始连接数 | 5 |
min-idle | 最小空闲连接 | 5 |
max-active | 最大连接数 | 20(根据业务调整) |
max-wait | 获取连接最大等待时间 | 60000 ms |
time-between-eviction-runs-millis | 检测间隔 | 60000 ms |
min-evictable-idle-time-millis | 连接最小生存时间 | 300000 ms |
validation-query | 检测 sql | select 1 |
test-while-idle | 空闲时检测 | true |
test-on-borrow | 获取时检测 | false(影响性能) |
test-on-return | 归还时检测 | false |
生产环境推荐配置
spring:
datasource:
druid:
initial-size: 10
min-idle: 10
max-active: 50
max-wait: 30000
time-between-eviction-runs-millis: 30000
min-evictable-idle-time-millis: 600000
validation-query: select 1
test-while-idle: true
test-on-borrow: false
test-on-return: false
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
filters: stat,wall,log4j2五、多数据源配置(进阶)
主从数据源配置
spring:
datasource:
master:
url: jdbc:mysql://master:3306/db1
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.driver
type: com.alibaba.druid.pool.druiddatasource
slave:
url: jdbc:mysql://slave:3306/db1
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.driver
type: com.alibaba.druid.pool.druiddatasource数据源配置类
@configuration
public class datasourceconfig {
@bean
@configurationproperties("spring.datasource.master")
public datasource masterdatasource() {
return druiddatasourcebuilder.create().build();
}
@bean
@configurationproperties("spring.datasource.slave")
public datasource slavedatasource() {
return druiddatasourcebuilder.create().build();
}
@bean
@primary
public datasource dynamicdatasource() {
map<object, object> targetdatasources = new hashmap<>();
targetdatasources.put("master", masterdatasource());
targetdatasources.put("slave", slavedatasource());
dynamicdatasource dynamicdatasource = new dynamicdatasource();
dynamicdatasource.setdefaulttargetdatasource(masterdatasource());
dynamicdatasource.settargetdatasources(targetdatasources);
return dynamicdatasource;
}
}六、spring boot 4 中的新变化
对 jakarta ee 10 支持更完善
druid starter 对 spring boot 4 兼容性提升
自动配置加载顺序优化
七、常见坑位总结
坑1:依赖冲突
解决:排除旧版 druid,使用 druid-spring-boot-3-starter
坑2:监控页面 404
解决:检查 servletregistrationbean 路径配置
坑3:连接泄漏
解决:开启 remove-abandoned,设置超时时间
坑4:慢 sql 不记录
解决:配置 slow-sql-millis,开启 stat 过滤器
八、本篇总结
- spring boot 4 默认 hikaricp,druid 提供监控
- druid 配置分:基础配置 + 连接池配置 + 监控配置
- 监控页面是生产环境排查问题的利器
- 连接池参数需要根据业务压测调整
- 多数据源用
abstractroutingdatasource实现
以上就是springboot4中数据源自动配置的原理与生产级调优详解的详细内容,更多关于springboot数据源配置的资料请关注代码网其它相关文章!
发表评论