ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2021-10-12 19:01:58  阅读:273  来源: 互联网

标签:SpringBoot 为例 数据库 配置 默认 Hikari 连接池


SpringBoot2数据库连接池自动装配原理

一、SpringBoot的数据库连接池的相关默认

SpringBoot之前的版本默认使用的是Tomcat的数据库连接池
较新的版本2.X,默认使用的是Hikari(我使用的是2.2.1),具体可以通过DataSourceConfiguration查看
默认支持数据库连接池:
Tomcat、Hikari、Dbcp2
在这里插入图片描述

二、SpringBoot默认的数据库连接池,以及自动装配原理

通过查看数据库自动装配类:org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration
我们截取其中的一个Hikari的代码装配过程,其他两个默认支持的数据源原理一样:
在这里插入图片描述
2.1 首先这是个静态成员内部类Hikari,并使用了@Configuration,里面只有一个方法dataSource并且该方法使用@Bean;于是我们知道该类目的是生成一个Hikari连接池的bean。

2.2 @ConditionalOnClass({HikariDataSource.class}):HikariDataSource在类路径上存在时,@Configuration才生效。
@ConditionalOnMissingBean({DataSource.class}):DataSource的bean不存在时,@Configuration才生效,避免生成多个dataSource。
@ConditionalOnProperty:从配置文件读取name指定的属性的值与havingValue相等时,@Configuration才生效,但havingValue = "true"使得当读取的值为空时该判断条件返回true,也就是说你不配置name指定的属性,该条件返回true,如果配置了name指定的属性,则与havingValue的值比较返回true或false。

2.3 DataSourceConfiguration中只集成了Hikari的jar包,SpringBoot默认使用Hikari数据库连接池请添加图片描述
2.4 @ConfigurationProperties(prefix = “spring.datasource.hikari”):自动为生成的bean(DataSource)注入配置文件的属性配置,如初始连接数,最大最小等等。

三、使用其他的数据库连接池:例如Druid

在这里插入图片描述
当我们在配置文件配置使用其他非默认数据库连接池时,SpringBoot默认使用的数据库连接池Hikari不会生成使用,转而会生成我们配置使用的数据库连接池;
3.1 添加相关的依赖

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

3.2 配置文件

 #数据源通用配置
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    # MSSQL连接信息
    url: jdbc:sqlserver://***.***.**.**:1433; DatabaseName=finance_x_uat
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    username: finance_x
    password: finance_x.aac
    druid:
      validationQuery: SELECT 1
      stat-view-servlet:
        loginUsername: admin
        loginPassword: 123456

      # 连接池的配置信息
      # 初始化大小,最小,最大
      initial-size: 5
      min-idle: 5
      maxActive: 20
      # 配置获取连接等待超时的时间
      maxWait: 60000
      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      timeBetweenEvictionRunsMillis: 60000
      # 配置一个连接在池中最小生存的时间,单位是毫秒
      minEvictableIdleTimeMillis: 300000
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      # 打开PSCache,并且指定每个连接上PSCache的大小
      poolPreparedStatements: true
      maxPoolPreparedStatementPerConnectionSize: 20
      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
      # filters: stat,wall,slf4j
      # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
      connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000

3.3 添加完依赖完成后
找spring.factories的自动配置类
在这里插入图片描述
分析Druid的DruidDataSourceAutoConfigure类
在这里插入图片描述
(1) @ConditionalOnClass(DruidDataSource.class)必须有DruidDataSource包才加载。

(2) @AutoConfigureBefore(DataSourceAutoConfiguration.class) 必须在DataSourceAutoConfiguration之前配置。因为 DataSourceAutoConfiguration默认是配置的HikariDataSource数据源,所以这里必须在之前配置。

(3) @EnableConfigurationProperties({DruidStatProperties.class, DataSourceProperties.class}) 开启了一些配置信息的数据项绑定。

(4) @Import下的4个Configuration
DruidSpringAopConfiguration Druid对SpringAOP的支持自动配置 可以自定匹配一些Spring组件的SQL监控规则
DruidStatViewServletConfiguration 自动化配置StatServlet视图
DruidWebStatFilterConfiguration 监控规则相关自动化配置
DruidFilterConfiguration 防火墙相关的自动化配置

@Bean(initMethod = “init”) //初始化方法init,在父类的DruidDataSource中,该方法定义了Druid的各种初始化操作并返回。

参考文章
SpringBoot自动化配置数据库原理
SpringBoot2数据库连接池自动装配原理

标签:SpringBoot,为例,数据库,配置,默认,Hikari,连接池
来源: https://blog.csdn.net/jike11231/article/details/120722718

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有