| |
|
开发:
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初始化 |
目录 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 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |