程序员码农|SpringBoot数据库配置源码解析:自动配置内部实现解析( 三 )
@Configuration(proxyBeanMethods = false)@EnableConf igurationProperties (DataSourceProperties . class)public class EmbeddedDataSourceConfiguration implements BeanClassL oaderAware{private ClassLoader classLoader;@0verridepublic void setBeanClassLoader(ClassLoader classLoader) {this. classLoader = classLoader;@Bean(destroyMethod = "shutdown")public EmbeddedDatabase dataSource (DataSourceProperties properties) {return new EmbeddedDatabaseBuilder(). setType( EmbeddedDatabaseConnec -tion. get(this. classLoader). getType()). setName(properties . determineDatabaseName()). build();}}
我们重点看以上代码中的 dataSource 方法 , 该方法的注解指定了销毁方法为“shutdown” , 也 就 是 EmbeddedDatabase 的 shutdown 方 法。在 方 法 内 部,首 先 创 建 了 一 个Embedded-DatabaseBuilder,用于构建内嵌数据库 EmbeddedDatabase 。 根据命名可知Embedded-DatabaseBuilder 是可以链式调用的 。
因此 , EmbeddedDatabaseBuilder 连续调用 了设置数据库类型(. 上面已经讲到获取实现)、设置内嵌数据库名称 。 最后 , 通过 build 方法完成 EmbeddedDatabase 的构建 , 并注入容器 。
至此 , 关于 EmbeddedDatabaseConfiguration 相关的 自动配置已经讲解完毕 。 在下节 , 我们将继续学习池化的数据源配置类 PooledDataSourceConfiguration 。
本文插图
PooledDataSourceConfiguration
除了支持内嵌的 DataSource , SpringBoot 还支持一些实现 Pool 的 DataSource 。 从上节讲到 的 DataSourceBuilder 的 静 态 数 组 可 以 看 出,目 前 支 持 com.zaxxer.hikari.Hikari-DataSourceorg.apache.tomcat.jdbc.pool.DataSource和org.apache.commons.dbcp2. Basic-DataSource 这 3 种 DataSource。而 性 能 更 加 优 秀 的HikariDataSource 作为了 Spring Boot 中的默认选项 。
在 DataSourceAutoConfiguration 中的 PooledDataSourceConfiguration 就是来完成实现Pool 的 DataSource 的实例化的 , 源代码如下 。@Configuration(proxyBeanMethods = false)@Conditional (PooledDataSourceCondition.class)@ConditionalOnMissingBean({ DataSource. class, XADataSource.class })@Import({ DataSourceConfiguration . Hikari. class, DataSourceConfiguration. Tomcat.class,DataSourceConfiguration. Dbcp2. class, DataSourceConfiguration. Generic. class,DataSourceJmxConfiguration.class })protected static class PooledDataSourceConfiguration {}}
PooledDataSourceConfiguration 中同样没有具体实现 。 @Conditional 的筛选条件也是由内部类 PooledDataSourceCondition 来完成的 , 这些内容前面已经讲过 , 这里不再赘述 。 该实例化对象的优先级要高于内嵌 DataSource 的 。
我们重点看@lmport 引入的前 4 个类 , 它们是 DataSourceConfiguration 的内部类 , 提供了Hikari、Tomcat、 Dbcp2、 Generic 的 DataSource 配置 。
DataSourceConfiguration 就 是 用 于 DataSourceAutoConfiguration 导 入 的 实 际 的DataSource 配置 , 这里我们以 Hikari 为例来进行讲解 。 Hikari 是 spring-boot-starter-jdbc默认弓|入的数据源 , Hikari 相关自动配置代码如下 。abstract class DataSourceConfiguration@SuppressWarnings ("unchecked" )protected staticT createDataSource(DataSourceProperties properties,Class extends DataSource> type )return (T) properties . initializeDataSourceBuilder() . type(type) . buildQ);}@Configuration(proxyBeanMethods = false)@ConditionalOnClass (HikariDataSource.class)@Conditiona lOnMiss ingBean(DataSource.class)@ConditionalOnProperty(name = "spring . datasource. type",havingValue =http://news.hoteastday.com/a/”com. zaxxer. hikari. HikariDataSource",matchIfMissing = true)static class Hikari {@Bean@ConfigurationProperties(prefix = "spring . datasource . hikari")public HikariDataSource dataSource(DataSourceProperties properties) {HikariDataSource dataSource = createDataSource(properties, HikariDataSource.class);if (StringUtils . hasText(properties . getName())) {dataSource . setPoolName (properties . getName());return dataSource;}}}
推荐阅读
- 程序员|京东双十一购物三大谜团:程序员买整盒口红 95后买老字号
- |阿里P7程序员:年包200万,拿到腾讯11级offer,跳吗
- 程序员|咕泡学院深圳站丨万有引力不如你们给力
- |某度程序员:入职3年周末从没加过班,公司很佛系,像养老公司
- 互联网|天猫双11:女生一天买了几十亿,程序员最爱还是格子衫
- 当当|当当1024程序员节大数据:人工智能类图书最受欢迎
- 程序员|开课吧:解密程序员的骄傲与低调,做好数字化人才的“摆渡人”
- 程序员节|1024程序员节在长沙举办
- 技术编程|华为码农把python入门知识点整理成漫画书了,让人茅塞顿开
- CSDN|@程序员,CSDN卫衣、背包、鼠标垫……福利来啦!!!