当前位置: 代码网 > it编程>编程语言>Java > SpringBoot4中数据源自动配置的原理与生产级调优详解

SpringBoot4中数据源自动配置的原理与生产级调优详解

2026年08月28日 Java 我要评论
数据访问是后端项目的核心。本文将带你整合 mysql 与 druid 连接池,详解自动配置原理、监控配置、多数据源与生产级调优,帮你彻底搞定 spring boot 4 的数据源配置。一、spring

数据访问是后端项目的核心。本文将带你整合 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检测 sqlselect 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 过滤器

八、本篇总结

  1. spring boot 4 默认 hikaricp,druid 提供监控
  2. druid 配置分:基础配置 + 连接池配置 + 监控配置
  3. 监控页面是生产环境排查问题的利器
  4. 连接池参数需要根据业务压测调整
  5. 多数据源用 abstractroutingdatasource 实现

以上就是springboot4中数据源自动配置的原理与生产级调优详解的详细内容,更多关于springboot数据源配置的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com