📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗
🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数,欢迎多多交流。👍
文章目录
- 写在前面的话
- 正文内容
- 技术简介
- 命名补充
- 利弊分析
写在前面的话
此篇博文简单介绍一下 SpringBoot 的 Starter 机制,仅供学习参考。
正文内容
技术简介
Spring Boot 为我们提供了简化企业级开发绝大多数场景的 starter pom,只要引入了相关依赖,就会采用自动配置并提供相关Bean,方便得集成和使用。
例如:Spring官方提供的:spring-boot-starter-web、spring-boot-starter-test。
Spring Boot Starter 也提供了规范可以让开发者提供自己的 starter,开发者通过添加 spring-boot-starter-* 这样的依赖就能支持具体的某个功能,更完整的功能列表可以查看:官网介绍
Tips:若是其他开源项目或公司提供的,是叫 xxx-spring-boot-starter,例如:mybatis-spring-boot-starter,这些还是需要额外一些配置的。
命名补充
spring-boot-starter-*:这是官方定义的starter,其中 *就代表某种场景。
*-spring-boot-starter: 这是规定第三方开发的 starter 的命名。
只要引入starter,这个场景的所有常规需要的依赖我们都自动引入。
所有场景启动器最底层的依赖是:spring-boot-starter
Tips:其实就是基于 Maven 的依赖传递,但是这个思想日常架构设计都需要。
利弊分析
通过对 SpringBoot 的学习,充分体验了自动化配置为我们带来的超便利开发方式,但是,在一些情况下 SpringBoot 的自动化配置也会给我们惹来不少的麻烦。
比如这些场景:项目依赖复杂的情况下,由于依赖方的依赖组织不够严格,可能引入了一些实际我们不需要的依赖,从而导致我们的项目满足一些特定的自动化配置。特别是,传统 Spring 项目转换为 Spring Boot 项目的过程中,由于不同的组织方式问题,引发自动化配置加载的错误,比如:通过xml手工组织的多数据源配置等。上面这些原因都会导致不必要的自动化配置加载而导致应用无法启动或触发/health的健康检查不通过等问题。
其实就是当项目引入一些jar之后,自动会初始化这部分功能,如果你没有相对的配置,可能会报错,这很常见了。
解决办法:
1、通过外部依赖的修改来解决:通过与依赖方沟通,在对方提供的API依赖中去掉不必要的依赖(有时候不切实际);
2、通过禁用指定的自动化配置来避免加载不必要的自动化配置,例如:@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})