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

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的代码装配过程,其他两个默认支持的数据源原理一样:

  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

可以看到当我们在配置文件配置使用其他非默认数据库连接池时,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日志输出,我的另一篇:

 springBoot使用druid数据库连接池以及logback,并开启慢sql记录输出到指定的日志文件

springBoot以及mybatis配置logback日志输出策略,按每天及大小滚动

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值