转载

OCP开源项目:数据库公共组件的实现(db-spring-boot-starter)

http://47.98.236.203:3000 用户名/密码:admin/1q2w3e4r

入群学习:(备注:Coder编程) 群1:483725710(满2000) 群2:897924507

db-spring-boot-starter

前面项目中,咱们使用了 db-core 为整个项目提供通用的数据库处理,现在我们将采用springboot 标准starter的做法,重构项目基础组件。

编写数据库公共组件db-spring-boot-starter

  • 工具类

    OCP开源项目:数据库公共组件的实现(db-spring-boot-starter)
  • AOP切换数据源类

    OCP开源项目:数据库公共组件的实现(db-spring-boot-starter)
  • 多数据源定义core log

    OCP开源项目:数据库公共组件的实现(db-spring-boot-starter)

user-center代码

  • user-center pom文件使用

    OCP开源项目:数据库公共组件的实现(db-spring-boot-starter)
  • user-center application.yml

    OCP开源项目:数据库公共组件的实现(db-spring-boot-starter)

咱们想想,在不同项目中,咱们的项目是如何装配这些对象的吗?下面咱们需要揭密。

  • db-spring-boot-starter 中定义了spring.factories文件

    OCP开源项目:数据库公共组件的实现(db-spring-boot-starter)
  • DataSourceAutoConfig 中@Import(DataSourceAOP.class)

    OCP开源项目:数据库公共组件的实现(db-spring-boot-starter)

那么这些文件是如何完成加载到spring容器的呢? 此时,咱们必须回到user-center,阅读源码

  • @SpringBootApplication

    OCP开源项目:数据库公共组件的实现(db-spring-boot-starter)
  • @EnableAutoConfiguration

    OCP开源项目:数据库公共组件的实现(db-spring-boot-starter)
  • AutoConfigurationImportSelector

    OCP开源项目:数据库公共组件的实现(db-spring-boot-starter)

阅读到这里,我们了解到,user-center在启动时,由于@SpringBootApplication是复合注解,包含@EnableAutoConfiguration,这个类中@import了核心处理类AutoConfigurationImportSelector,这个类的核心就是将classpath中搜索所有META-INF/spring.factories配置文件 ,并且将其中org.springframework.boot.autoconfigure.EnableAutoConfiguration key对应的配置项加载到spring容器

springboot中的类SPI扩展机制

在springboot的自动装配过程中,最终会加载META-INF/spring.factories文件,而加载的过程是由SpringFactoriesLoader加载的。从CLASSPATH下的每个Jar包中搜寻所有META-INF/spring.factories配置文件,然后将解析properties文件,找到指定名称的配置后返回。需要注意的是,其实这里不仅仅是会去ClassPath路径下查找,会扫描所有路径下的Jar包,只不过这个文件只会在Classpath下的jar包中。

原文  https://juejin.im/post/5e1acbdd6fb9a03010650bf6
正文到此结束
Loading...