当前位置: 首页 > news >正文

未备案网站个人网站规划书模板

未备案网站,个人网站规划书模板,做外汇必须要网站,店铺销售系统软件哪个好在 Spring Boot 中,数据源的自动配置是框架中一个关键功能,本文将以 Spring Boot 2.1.7 版本为例,详细讲解在单数据源情况下数据源是如何自动加载的。我们通过源码分析,追踪整个加载流程。 1. 自动配置类的发现 Spring Boot 使用…

在 Spring Boot 中,数据源的自动配置是框架中一个关键功能,本文将以 Spring Boot 2.1.7 版本为例,详细讲解在单数据源情况下数据源是如何自动加载的。我们通过源码分析,追踪整个加载流程。


1. 自动配置类的发现

Spring Boot 使用 spring.factories 机制加载自动配置类。在 org.springframework.boot.autoconfigure 包的 META-INF/spring.factories 文件中,可以找到:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

其中,DataSourceAutoConfiguration 是数据源的自动配置类。


2. DataSourceAutoConfiguration

进入 DataSourceAutoConfiguration 类,可以看到其内部有一个静态嵌套类 PooledDataSourceConfiguration

@Configuration
@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 {protected PooledDataSourceConfiguration() {}
}
关键点解释:
  1. @Conditional:依赖于 PooledDataSourceCondition 判断是否满足条件。
  2. @ConditionalOnMissingBean:确保没有自定义DataSourceXADataSource Bean。
  3. @Import:导入了 HikariTomcatDbcp2 等数据源的配置类。

3. DataSourceConfiguration.Hikari

进入 DataSourceConfiguration.Hikari,这是 HikariCP 数据源的配置类(Tomcat、Dbcp2也类似):

@Configuration
@ConditionalOnClass({HikariDataSource.class})
@ConditionalOnMissingBean({DataSource.class})
@ConditionalOnProperty(name = {"spring.datasource.type"},havingValue = "com.zaxxer.hikari.HikariDataSource",matchIfMissing = true
)
static class Hikari {Hikari() {}@Bean@ConfigurationProperties(prefix = "spring.datasource.hikari")public HikariDataSource dataSource(DataSourceProperties properties) {HikariDataSource dataSource = (HikariDataSource)DataSourceConfiguration.createDataSource(properties, HikariDataSource.class);if (StringUtils.hasText(properties.getName())) {dataSource.setPoolName(properties.getName());}return dataSource;}
}
关键点解释:
  1. @ConditionalOnClass:确保 HikariDataSource 在类路径中存在,即有在pom文件中直接或间接的导入HikariCP依赖。
  2. @ConditionalOnMissingBean:如果没有自己定义其他 DataSource,则会加载此配置。
  3. @ConditionalOnProperty:当在application.yml或application.properties配置文件中 spring.datasource.type 的值是 HikariDataSource 或未定义时,匹配条件成立,使用 Hikari 数据源。
    @ConditionalOnProperty具体用法可以看这篇:@ConditionalOnProperty

4. createDataSource 方法

进入 DataSourceConfiguration.createDataSource 方法:

protected static <T> T createDataSource(DataSourceProperties properties, Class<? extends DataSource> type) {return properties.initializeDataSourceBuilder().type(type).build();
}

initializeDataSourceBuilder 方法采用了建造者模式对DataSourceBuilder对象进行了属性赋值。具体源码比较简单,大家可以自己点进去看看,要是看不懂可以先去看看建造者模式的文章。
建造者模式可以看这篇文章:建造者模式


5. DataSourceBuilderbuild 方法

进入build 方法:

public T build() {Class<? extends DataSource> type = this.getType();DataSource result = (DataSource)BeanUtils.instantiateClass(type);this.maybeGetDriverClassName();this.bind(result);return result;
}
关键步骤:
  1. getType 方法:获取数据源的类型。
  2. BeanUtils.instantiateClass(type):通过反射实例化数据源对象。
  3. bind(result):将配置信息绑定到数据源对象。

6. getType 方法与默认数据源

getType 方法中,当 typenull 时,进入 findType 方法:

private Class<? extends DataSource> getType() {Class<? extends DataSource> type = this.type != null ? this.type : findType(this.classLoader);if (type != null) {return type;} else {throw new IllegalStateException("No supported DataSource type found");}
}
findType 方法的实现:
public static Class<? extends DataSource> findType(ClassLoader classLoader) {String[] var1 = DATA_SOURCE_TYPE_NAMES;for (String name : var1) {try {return ClassUtils.forName(name, classLoader);} catch (Exception ignored) {}}return null;
}private static final String[] DATA_SOURCE_TYPE_NAMES = new String[]{"com.zaxxer.hikari.HikariDataSource","org.apache.tomcat.jdbc.pool.DataSource","org.apache.commons.dbcp2.BasicDataSource"
};
关键点解释:
  1. 默认数据源顺序

    • com.zaxxer.hikari.HikariDataSource(HikariCP)
    • org.apache.tomcat.jdbc.pool.DataSource(Tomcat 数据源)
    • org.apache.commons.dbcp2.BasicDataSource(DBCP2 数据源)
  2. typenull 时,会按照顺序加载第一个可用的数据源,即 HikariCP


7. 总结

通过以上分析,可以得出 Spring Boot 数据源自动加载的核心流程:

  1. 加载自动配置类:通过 spring.factories 加载 DataSourceAutoConfiguration
  2. 匹配数据源配置:判断条件,导入 HikariTomcatDbcp2 等数据源配置类。
  3. 优先选择 HikariCP:如果未指定 spring.datasource.type,默认会选择 HikariCP 作为数据源。
  4. 数据源初始化:通过 DataSourceBuilder 使用责任链模式构建数据源对象。

8. 源码阅读建议

在阅读 Spring Boot 源码时,版本差异可能会导致配置逻辑有所不同,因此:

  1. 尽量选择与项目中一致的 Spring Boot 版本。
  2. 使用调试工具,逐步跟踪代码执行流程,理解自动配置的细节。

希望本文能帮助大家更好地理解 Spring Boot 2.1.7 数据源自动加载的过程,也欢迎大家在评论区留言,一起交流学习!

http://www.wooajung.com/news/27631.html

相关文章:

  • 德国搜索引擎seowhy
  • 怎么样做网站或产品推广无锡网络优化推广公司
  • 大型企业网站制作网络营销的实现方式有哪些
  • wordpress 标签中文百度刷排名seo软件
  • 网站导流应该怎么做app开发定制
  • 三星企业网站建设ppt汕头百度关键词推广
  • 长春做网站seo的朝阳网站建设
  • 动态网站开发是什么书微信运营方案
  • 网站开发技术有什么软件百度一下百度搜索入口
  • 佛山html5网站建设培训网站官网
  • 有谁做网站2023网站seo
  • 想注册一个公司怎么注册优化网站怎么真实点击
  • 在哪人网站要以接it项目做免费的网页制作软件
  • vs怎么添加做网站seo l
  • 广东移动手机营业厅网站短视频seo排名
  • photoshop网站模板设计教程关键词排名查询软件
  • 网站会员页面做httpssemiconductor
  • 宝安附近公司做网站建设多少钱查收录
  • 域名注册服务原则上实行什么百度seo优化公司
  • 中国房地产未来走势谷歌优化师
  • wordpress多站点支付插件泰州seo网站推广
  • 内蒙古做网站的公司百度爱采购竞价推广
  • 淄博政府网站建设公司怎么在百度上推广产品
  • 电子商务网站建设的目标网站seo公司哪家好
  • 1核1g服务器做网站企业网站设计
  • 众筹网站建设seo教程下载
  • 动漫做3d游戏下载网站有哪些百度推广靠谱吗
  • 如何把网站程序做授权网址访问怎样去推广自己的网店
  • 建设厅投诉网站首页商品推广软文写作500字
  • 政府网站集约化建设流程西安小程序开发的公司