IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Druid阅读(二)Druid初始化 -> 正文阅读

[Java知识库]Druid阅读(二)Druid初始化

目录

1 寻找源码入手点

2 开始Druid初始化分析

3 官方文档Spring boot项目中轻松集成Druid数据库连接池和监控


1 寻找源码入手点

如何开始Druid源码的阅读,这不免是个头痛的问题?

呃呃呃...昨天我们已经搭建好了一个基于Spring boot的Druid的demo,那么今天不妨直接基于搭建的示例来瞧瞧如何入手?

启动Spring boot示例项目观察到,如下截图的输出日志,图中的红框处

再看自己工程的Druid配置,用spring.datasource做了一系列的配置(druid相关配置有问题,后面会做说明),然后配置了一个

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

如以下截图所示:

再看pom.xml引入了druid-spring-boot-starter,这个druid就集成进去了。

ok,那么基于这些,不妨就开始先研究下Druid是如何通过这些配置集成Spring boot并初始化相关的配置的。

2 开始Druid初始化分析

Idea快捷键ctrl+shift+f全局搜索关键字Init DruidDataSource,定位到相关的源码位置(如果用关键字未搜索到,请在示例工程里下载Druid的源码后再次搜索),然后打个断点,如下图所示:

然后重新启动示例工程,我们看到断点进来了,且看该方法,是一个DruidDataSourceAutoConfigure的配置类,该方法是在druid-spring-boot-starter提供的,所以在我们pom.xml引入了这个jar包后,那么这个配置类就生效了,在Spring boot启动的时候就会开始加载这个类,就有了我们看到的Init DruidDataSource日志打印了。

接下来我们分析下这个类做了什么事情?

1、@ConditionalOnClass(DruidDataSource.class)注解表示依赖了DruidDataSource这个对象
2、@AutoConfigureBefore(DataSourceAutoConfiguration.class),表明在初始化Druid的配置前会先初始化DataSource的相关配置,而这些配置会从application.properties的以下属性读取:
spring.datasource.url=jdbc:mysql://localhost:3306/shenyu?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver


DataSourceAutoConfiguration源码如下图所示:

?3、

@EnableConfigurationProperties({DruidStatProperties.class, DataSourceProperties.class})

读取application.properties的以下属性到两个对象中:

spring.datasource.url=jdbc:mysql://localhost:3306/shenyu?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver

spring.datasource.initialSize=5
spring.datasource.minIdle=10
spring.datasource.maxActive=20
spring.datasource.maxWait=6000
spring.datasource.timeBetweenEvictionRunsMillis=2000
spring.datasource.minEvictableIdleTimeMillis=600000
spring.datasource.maxEvictableIdleTimeMillis=900000
spring.datasource.validationQuery=select 1
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
spring.datasource.keepAlive=true
spring.datasource.phyMaxUseCount=1000
spring.datasource.filters=stat
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

两个对象的源码截图如下所示,一个是读取spring.datasource开头,一个是读取spring.datasource.druid开头,而我的配置里没有这个开头的,有没有问题?先继续往下看先。

?从如下截图可以看到注册了DruidDataSourceWrapper,并且注册的同时会初始化一个init方法

点击DruidDataSourceWrapper对象可以看到它实现了DruidDataSource对象

再看DruidDataSource对象的源码,可以看到会先初始化这个构造函数,然后去读取Druid的配置信息,然后再一看还是读取的spring.datasource.druid开头的配置信息,这里基本就可以确认笔者的Druid的相关配置是有问题了。(主要这种启动没读取到就会用默认值,并不会报错,而往往使用者也并不知道配置有没有生效,这就尴尬了。先留着这个疑问后面源码研究再看。)

?最后则是调用了DruidDataSource对象的init方法,前面提到注册的时候会初始化init方法,而再一看这个方法初始化了各种配置信息,也可以猜想出这就是初始化的核心逻辑了。init方法的部分源码截图如下:

?再看前面示例工程启动后看到的{dataSource-1} inited,也是在init方法的末尾处,初始了相关配置了就会打印处这么一句话,表示Druid的数据源创建成功。

3 官方文档Spring boot项目中轻松集成Druid数据库连接池和监控

可以打开官方文档链接再去看下Spring boot项目集成Druid的正确姿势哈。https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-09 19:20:29  更:2021-11-09 19:22:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:00:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码