子龙 子龙
首页
学习指南
工具
AI副业
开源项目
技术书籍

程序员子龙

Java 开发从业者
首页
学习指南
工具
AI副业
开源项目
技术书籍
  • 基础

  • JVM

  • Spring

  • 并发编程

  • Mybatis

  • 网络编程

  • 数据库

  • 缓存

  • 设计模式

  • 分布式

  • 高并发

  • SpringBoot

    • SpringBoot 整合redis
    • SpringBoot 线程池
    • springboot下整合mybatis
    • spring boot 配置文件的加载顺序
    • springboot启动不加载bootstrap.yml文件的问题解决
    • SpringBoot设置动态定时任务
    • springboot整合hibernate
    • ApplicationRunner、InitializingBean、@PostConstruct使用详解
    • Spring Boot 优雅的参数校验方案
    • ELK处理 SpringBoot 日志,太优雅了!
    • SpringBoot配置数据源
      • 数据源的自动配置
        • DataSourceAutoConfiguration:数据源自动配置类
      • HikariCP
      • Druid
      • 性能对比
    • Spring Boot 默认数据库连接池 —— HikariCP
    • 数据库连接池Hikari监控
    • Spring Boot中使用AOP统一处理Web请求日志
    • SpringBoot 三大开发工具,你都用过么?
    • Spring Boot 3.2 + CRaC = 王炸!
    • springboot启动的时候排除加载某些bean
    • spring boot中集成swagger
    • springboot项目引入这个包以后把原来的json报文改为了xml格式返回
    • SpringBoot中new对象不能自动注入对象和属性的问题
    • 使用 Spring Boot Actuator 监控应用
    • 记录一次springboot自动任务线上突然不执行问题排查过程
    • SpringBoot定时任务@Scheduled源码解析
    • Spring Boot + Lua = 王炸!
    • Spring Boot 实现定时任务动态管理
    • SpringBoot的@Async注解有什么坑?
    • druid 参数配置详解
    • Spring Boot HandlerMethodArgumentResolver 使用和场景
    • SpringBoot数据加解密
    • 解决controller层注入的service为null
    • 在 Spring Boot 中通过 RequestBodyAdvice 统一解码请求体
    • SpringBoot之使用Redisson实现分布式锁(含完整例子)
  • SpringCloudAlibaba

  • Nginx

  • 面试

  • 生产问题

  • 系统设计

  • 消息中间件

  • Java
  • SpringBoot
程序员子龙
2024-01-29
目录

SpringBoot配置数据源

# 数据源的自动配置

首先导入JDBC依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
1
2
3
4

导入JDBC依赖后,我们可以在Maven的Dependencies依赖里看出spring-boot-starter-data-jdbc自动帮我们引入了数据源、JDBC与事务相关jar包。

由于数据源的配置是SpringBoot自动配置的,因此我们在外部依赖库里找到jdbc相关的自动配置:

# DataSourceAutoConfiguration:数据源自动配置类

其中DataSourceAutoConfiguration是数据源的自动配置类,其定义了一些静态方法,其中底层数据源相关的是:

@Configuration(proxyBeanMethods = false)
@Conditional({DataSourceAutoConfiguration.PooledDataSourceCondition.class})
@ConditionalOnMissingBean({DataSource.class, XADataSource.class})
@Import({Hikari.class, Tomcat.class, Dbcp2.class, OracleUcp.class, Generic.class, DataSourceJmxConfiguration.class})
protected static class PooledDataSourceConfiguration {
    protected PooledDataSourceConfiguration() {
    }
}
1
2
3
4
5
6
7
8

其中@ConditionalOnMissingBean注解的含义是当容器内没有DataSource数据源时,才进行下面的自动配置默认的数据源;而@Import注解则说明了我们要引入的默认数据源是Hikari数据源。也就是说,在我们不做任何处理的情况下,SpringBoot为我们底层配置好的连接池是:HikariDataSource。

# HikariCP

Springboot内置的JDBC启动器默认的数据源是:HikariCP

<!--JDBC启动器-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--mysql的依赖-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
1
2
3
4
5
6
7
8
9
10
11

配置数据源:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&useCursorFetch=true
    username: root
    password: 123456
    hikari:
      # 连接池中允许的最小连接数
      minimum-idle: 10
      #连接池中允许的最大连接数
      maximum-pool-size: 10
1
2
3
4
5
6
7
8
9
10
11

单元测试

@Autowired
    private DataSource dataSource;
    @Autowired
    JdbcTemplate jdbcTemplate;

    @Test
    public void testDataSource(){
        //默认数据源为:class com.zaxxer.hikari.HikariDataSource
        System.out.println("默认数据源为:" + dataSource.getClass());

    }
1
2
3
4
5
6
7
8
9
10
11

# Druid

  • Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C3P0、DBCP 等 DB 池的优点,同时加入了日志监控。
  • 支持所有 JDBC(Oracle、MySQL、SQL Server 和 H2等 )
  • Druid 可以很好的监控 DB 池连接和 SQL 的执行情况,天生就是针对监控而生的 DB 连接池。
  • Druid 已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。

引入依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.6</version>
</dependency>
1
2
3
4
5

配置数据源:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&useCursorFetch=true
    username: root
    password: 123456
    type: com.alibaba.druid.pool.DruidDataSource    #配置druid,默认为HikariCP
    
    druid:
      initialSize: 5
      minIdle: 5
      maxActive: 20
      maxWait: 60000
      timeBetweenEvictionRunsMillis: 60000
      minEvictableIdleTimeMillis: 300000
      validationQuery: SELECT 1 FROM DUAL
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      poolPreparedStatements: true
      maxPoolPreparedStatementPerConnectionSize: 20
      useGlobalDataSourceStat: true
      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计。stat:监控统计 log4:日志记录 wall:防御sql注入
      # 如果运行时报错:ClassNotFoundException:orgapache.log4j.Priority,则导入log4j依赖即可
      filters: stat,wall,log4j

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

也可以这样配置:

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/springboot_test?characterEncoding=utf8&serverTimezone=UTC
      username: root
      password: root
1
2
3
4
5
6
7
   @Test
    public void testDataSource(){
        //class com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceWrapper
        System.out.println("数据源为:" + dataSource.getClass());

    }
1
2
3
4
5
6

# 性能对比

功能类别 功能 Druid HikariCP DBCP Tomcat-jdbc C3P0
性能 PSCache 是 否 是 是 是
LRU 是 否 是 是 是
SLB负载均衡支持 是 否 否 否 否
稳定性 ExceptionSorter 是 否 否 否 否
扩展 扩展 Filter JdbcIntercepter
监控 监控方式 jmx/log/http jmx/metrics jmx jmx jmx
支持SQL级监控 是 否 否 否 否
Spring/Web关联监控 是 否 否 否 否
诊断支持 LogFilter 否 否 否 否
连接泄露诊断 logAbandoned 否 否 否 否
安全 SQL防注入 是 无 无 无 无
支持配置加密 是 否 否 否 否 否
上次更新: 2024/03/18, 15:55:19
ELK处理 SpringBoot 日志,太优雅了!
Spring Boot 默认数据库连接池 —— HikariCP

← ELK处理 SpringBoot 日志,太优雅了! Spring Boot 默认数据库连接池 —— HikariCP→

最近更新
01
保姆级教程 用DeepSeek+飞书,批量写文案、写文章,太高效了
06-06
02
还在为整理视频思维导图发愁?2 种超实用技巧,让你 10 分钟搞定,高效又省心!
06-06
03
熬夜做PPT?AI一键生成高逼格幻灯片,效率提升10倍!
06-06
更多文章>
Theme by Vdoing | Copyright © 2024-2025

    辽ICP备2023001503号-2

  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式