欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springBoot2数据库连接池自动装配原理,以及如何配置使用其他的数据库连接池(druid)为例

程序员文章站 2022-05-17 18:41:58
...

1.SpringBoot的数据库连接池的相关默认

  1. springBoot之前的版本默认使用的是Tomcat的数据库连接池
  2. 较新的版本2点多(具体多少我看看)默认使用的是Hikari(我使用的是2.2.1)
  3. 默认支持数据库连接池:
    1. Tomcat
    2. Hikari
    3. Dbcp2

2.springBoot默认的数据库连接池,以及自动装配原理

这部分可以通过查看数据库自动装配类:org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration
我们截取其中的一个Hikari的代码装配过程,其他两个默认支持的数据源原理一样:

springBoot2数据库连接池自动装配原理,以及如何配置使用其他的数据库连接池(druid)为例

  1. 首先这是个静态成员内部类Hikari,并使用了@Configuration,里面只有一个方法dataSource并且该方法使用@Bean;于是我们知道该类目的是生成一个Hikari连接池的bean
  2. @ConditionalOnClass({HikariDataSource.class}):HikariDataSource在类路径上存在时,@Configuration才生效
  3. @ConditionalOnMissingBean({DataSource.class}):DataSource的bean不存在时,@Configuration才生效,避免生成多个dataSource
  4. @ConditionalOnProperty:从配置文件读取name指定的属性的值与havingValue相等时,@Configuration才生效,但
    havingValue = "true"使得当读取的值为空时该判断条件返回true,也就是说你不配置name指定的属性,该条件返回true,如果配置了name指定的属性,则与havingValue的值比较返回true或false
  5. 2、3、4同时成立,@Configuration才生效
  6. springBoot是怎么实现默认使用Hikari数据库连接池呢?答案是pringBoot默认支持的三个数据源(查看DataSourceConfiguration代码你就知道)中只集成了Hikari的jar包(条件2);
  7. @ConfigurationProperties(prefix = "spring.datasource.hikari"):自动为生成的bean(DataSource)注入配置文件的属性配置,如初始连接数,最大最小等等
  8. 当我们需要使用其他两个默认支持的两个数据库连接池时:
    1.导入相关的jar包
    2.配置spring.datasource.type为org.apache.commons.dbcp2.BasicDataSource或者org.apache.tomcat.jdbc.pool.DataSource

springBoot数据库连接池的自动装配原理到此为止

3.使用其他的数据库连接池:例如Druid

同样查看数据库自动装配类:org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration

springBoot2数据库连接池自动装配原理,以及如何配置使用其他的数据库连接池(druid)为例

可以看到当我们在配置文件配置使用其他非默认数据库连接池时,SpringBoot默认使用的数据库连接池Hikari不会生成使用,转而会生成我们配置使用的数据库连接池;

当我们使用非默认支持的数据库连接池时该如何做?以Druid为例:

1.添加相关的依赖

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>

2.配置文件:

spring:
  datasource:
    url: 
    username: 
    password: 
    type: com.alibaba.druid.pool.DruidDataSource

经过这两个步骤数据库连接池就能成功切换成Druid了

如果你想设置其他一些高级属性就需要自己定制配置类@Configuration,像org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration生成Hikari一样来生成自己想要的数据库连接池

Druid为例:

1.配置属性

spring:
  datasource:
    url: 
    username: 
    password: 
    type: com.alibaba.druid.pool.DruidDataSource
#高级属性
    initialSize: 5
    minIdle: 5
    maxActive: 10
    maxWait: 60000     #获取连接时最大等待时间,单位毫秒

2.手动生成

@Configuration
@ConditionalOnClass({DruidDataSource.class})
@ConditionalOnMissingBean({DataSource.class})
@ConditionalOnProperty(
        name = {"spring.datasource.type"},
        havingValue = "com.alibaba.druid.pool.DruidDataSource"
)
public class DruidConfig {

    //该注解向bean自动注入对应的属性,属性在配置文件配置
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druid(){
        return new DruidDataSource();
    }
}

文章到此为止,有收获的点个赞

如果你想看druid高级功能,如监控sql以及慢sql日志输出,我的另一篇:

https://blog.csdn.net/to_study/article/details/103537295