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

  • 一、SpringBoot的数据库连接池的相关默认
  • 二、SpringBoot默认的数据库连接池,以及自动装配原理
  • 三、使用其他的数据库连接池:例如Druid

一、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_uatdriver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriverusername: finance_xpassword: finance_x.aacdruid:validationQuery: SELECT 1stat-view-servlet:loginUsername: adminloginPassword: 123456# 连接池的配置信息# 初始化大小,最小,最大initial-size: 5min-idle: 5maxActive: 20# 配置获取连接等待超时的时间maxWait: 60000# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒timeBetweenEvictionRunsMillis: 60000# 配置一个连接在池中最小生存的时间,单位是毫秒minEvictableIdleTimeMillis: 300000testWhileIdle: truetestOnBorrow: falsetestOnReturn: false# 打开PSCache,并且指定每个连接上PSCache的大小poolPreparedStatements: truemaxPoolPreparedStatementPerConnectionSize: 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数据库连接池自动装配原理

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

  1. springboot 整合redis_springboot自动装配原理详解

    1)传统ssm整合redis的时候 需要在xml的配置文件中 进行大量的配置Bean 我们在这里使用springboot来代替ssm的整合,只是通过xml的形式来整合redis 第一步:加入配置 &l ...

  2. Alian解读SpringBoot 2.6.0 源码(十):启动流程之自动装配原理

    目录 一.背景 1.1.主类的加载 1.2.后置处理器的获取 二.配置类后处理器 2.1.获取配置类 2.2. 2.3.解析主类 2.3.1.整体解析过程 2.3.2.核心解析过程 2.3.3.延迟导 ...

  3. 【SpringBoot】自动装配原理

    [SpringBoot]自动装配原理 文章目录 [SpringBoot]自动装配原理 一.pom.xml 1.spring-boot-dependencies 2.spring-boot-starte ...

  4. springboot 项目起步讲解及自动装配原理

    哈喽~大家好,这篇看看springboot 项目起步讲解及自动装配原理.

  5. 【理解springboot自动装配原理】

    理解springboot自动装配原理: 最近读了小马哥(mercyblitz)Springboot编程思想(核心篇),有了一些心得和感悟,分享给大家: 1. 官网介绍了激活自动装配的方法: * 文档提 ...

  6. SpringBoot自动装配原理浅析

    Springboot自动装配原理 SpringBoot是当下J2EE最为流行的框架,它有着轻量,快捷等特点,让程序员们可以专注在业务逻辑的编写上,而不用花太多的力气在一些环境的配置,整合组件的配置上面 ...

  7. spring自动装配原理

    为了搞明白自动装配原理,需要知道spring容器管理bean的生命周期 Spring Bean 生命周期流程图 bean自身方法的生命周期 分为四步: //执行此段代码,spring容器的bean执行 ...

  8. 刨析 SpringBoot 自动装配原理,其实很简单

    J3 SpringBoot # 源码 # 自动装配 一日我在愉快得遨游时,看到有鱼友在问:SpringBoot 中引入了 Nacos 依赖为啥就可以直接使用 Nacos 中的相关功能呀! 认真思考了一 ...

  9. 雷神SpringBoot入门和自动装配原理

    SpringBoot-helloWord! 首先让当前的工程作为Springboot的子工程 <parent><groupId>org.springframework.boot ...

最新文章

  1. Java Object中的clone方法
  2. h5禁止页面长按操作_HTML5 对于手机页面长按会粘贴复制的禁用 (解决方案)
  3. springCloud 学习记录过程
  4. django的模板系统过滤器笔记
  5. 基于Element UI Calendar实现日程提醒功能
  6. sketch插件 android,设计师必备的SKetch插件合集
  7. 如果你恨一个人...
  8. 机器学习技术:使用深度学习处理文本
  9. D435i+vins-Fusion+ego-planner+yolo无人机避障实测
  10. 《PHP挖宝》1—再论框架
  11. LPC1768 SSP0驱动示例——SD卡驱动
  12. 闻酥园与宫廷糕点的桃酥对比
  13. html网页收藏夹小图标,在网页标题栏上和收藏夹显示网站logo的实现方法
  14. 实现库房批次管理,先进先出原则(一次难忘的找bug经历)
  15. Java实现一个简单双色球摇奖功能
  16. 56道java基础必“背“面试题(备战2022金三银四)
  17. easypoi教程_easypoi 读取 Excel 简单应用
  18. CSS基础学习--6 CSS Text(文本)
  19. 第一篇博文——与诸位共勉
  20. grep 跨行搜索(匹配)

热门文章

  1. Redis——redis能做干什么
  2. android关闭屏幕背光,Android 的背光控制
  3. 通达信超级分时主图指标公式_通达信公式
  4. Android面试题总结【完整详细版本一】(含答案)
  5. LKT-L12 双界面读卡器
  6. 树莓派串口通信编码_树莓派3B/3B+与Rosbot通信02:USB与串口通信
  7. Telnet远程登录设备管理
  8. c语言 杨辉三角(详解)
  9. shell 脚本 linux 检测硬盘
  10. HTML 5被媒体炒作