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

  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. 二、三、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数据库链接池的自动装配原理到此为止spring

3.使用其余的数据库链接池:例如Druid

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

能够看到当咱们在配置文件配置使用其余非默认数据库链接池时,SpringBoot默认使用的数据库链接池Hikari不会生成使用,转而会生成咱们配置使用的数据库链接池;数据库

当咱们使用非默认支持的数据库链接池时该如何作?以Druid为例:apache

1.添加相关的依赖tomcat

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

2.配置文件:mybatis

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

通过这两个步骤数据库链接池就能成功切换成Druid了spring-boot

若是你想设置其余一些高级属性就须要本身定制配置类@Configuration,像org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration生成Hikari同样来生成本身想要的数据库链接池ui

Druid为例:url

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日志输出策略,按天天及大小滚动