Spring Boot Starter工程如何快速定位自动化配置类

简介: Spring Boot Starter工程如何快速定位自动化配置类

前言


现在Spring Boot越来越流行,而各种Spring Boot Starter工程由于其提供的自动化配置的特性,极大的提高了我们的开发速度。但同时也给定位问题,了解实现原理带来了一定的困难。 而要了解Spring Boot Starter工程的底层原理,最核心的就是找到工程中的自动化配置类。 本文根据自己的开发经验,总结以下快速定位自动化配置类的方法。

由于最近在进行gateway的改造,就以 spring-cloud-starter-gateway来说明.

<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-gateway</artifactId>
  </dependency>


一、根据自动化配置的类名前缀搜索


一般自动化配置类会根据Maven依赖中的artifactId里面的名称来命令。

比如:spring-cloud-starter-gateway,表示这个依赖项目是gateway网关依赖包,一般对应的自动化配置类会以Gateway开头。

在idea中,直接双击Shift搜索Gateway开头的类就能很轻易的发现GatewayAutoConfiguration类。

56.png


二、根据启用注解查找


自动化配置实现原理里面提到过,一般有2种实现方式。

第一种是在META-INF目录下的spring.factories配置org.springframework.boot.autoconfigure.EnableAutoConfiguration属性指定自动化配置文件。

第二种是通过@Enable***启动注解来注入自动化配置文件。

比如@EnableDiscoveryClient,@EnableOpenApi,@EnableSwagger2

<dependency>
        <groupId>io.springfox</groupId>
          <artifactId>springfox-boot-starter</artifactId>
          <version>3.0.0</version>
      </dependency>


要启动springfox-boot-starter的自动化配置特性,需要在启动类上添加@EnableOpenApi注解。

@SpringBootApplication(exclude = {
        GatewayDiscoveryClientAutoConfiguration.class
})
@EnableDiscoveryClient
@Slf4j
@EnableOpenApi
public class WxswjGatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(WxswjGatewayApplication.class, args);
        log.info("网关服务启动成功!");
    }
}


在idea中,点击@EnableOpenApi注解,观察@Import注解导入的自动化配置类OpenApiDocumentationConfiguration.class

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Import({OpenApiDocumentationConfiguration.class})
public @interface EnableOpenApi {
}


三、根据对应的配置属性定位


一般导入Spring Boot Starter工程的依赖后,都会调整一些对应的配置属性。我们可以根据配置属性来定位相关的自动化配置类。


下面是gateway网关集成注册中心的相关配置


#配置网关的默认路由
spring.cloud.gateway.enabled=true
spring.cloud.gateway.discovery.locator.enabled=true
spring.cloud.gateway.discovery.locator.lower-case-service-id=true


点击属性spring.cloud.gateway.discovery.locator.enabled,会跳转到DiscoveryLocatorProperties 属性配置文件中。

@ConfigurationProperties("spring.cloud.gateway.discovery.locator")
public class DiscoveryLocatorProperties {
    private boolean enabled = false;
    private String routeIdPrefix;
    private String includeExpression = "true";
    private String urlExpression = "'lb://'+serviceId";
    private boolean lowerCaseServiceId = false;
    private List<PredicateDefinition> predicates = new ArrayList();
    private List<FilterDefinition> filters = new ArrayList();
    public DiscoveryLocatorProperties() {
    }
    public boolean isEnabled() {
        return this.enabled;
    }
    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }
    ……

然后点击IDEA中的文件定位按钮,快速定位到相关配置属性类和自动化配置文件GatewayDiscoveryClientAutoConfiguration

54.png

55.png


四、根据依赖包查找


根据依赖包的名称spring-cloud-starter-gateway,在工程的maven依赖下,找到对应的工程,展开查看。

可以通过在META-INF目录下的spring.factories配置org.springframework.boot.autoconfigure.EnableAutoConfiguration属性查看相关的自动化配置文件。

也可以直接查看config目录下的自动化配置文件。

53.png


五、四种方法对比


第一种方法直接通过自动化配置名称搜索是最方便的方式,当然前提是引入的Spring Boot Starter工程的自动化配置类的命名符合规范。


第二种方式通过类似@EnableSwagger2的启动注解来定位自动化配置类,只适用采用@EnableXXX注入自动化配置类实现自动化配置的项目。


第三种方式利用相关的配置属性来定位实现自动化配置类,这种方式最精准,能根据相关功能的配置直接定位到对应功能的自动化配置类。

比如在研究gateway网关怎么和注册中心整合的时候,如果通过上面的2种方式,很难定位到对应功能的自动化配置类GatewayDiscoveryClientAutoConfiguration。而根据配置属性spring.cloud.gateway.discovery.locator.enabled,可以很轻松的定位到自动化配置类。

所以相对来说,前2种方式更适合定位总的自动化配置入口,方式三适合精准定位。


第四种方式是最原始的一种傻瓜式查找操作,如果项目的maven依赖非常多,根据依赖包的名称找对应的依赖工程就容易眼花缭乱,不推荐。


总结


本文主要是总结了4种快速定位Spring Boot Starter工程的自动化配置类的方法。


在学习spring boot的过程中,大家首先要熟悉Spring Boot的自动化配置原理,这样就很容易理解Spring Boot Starter工程的实现原理。


然后在实际开发中,通过快速定位Spring Boot Starter工程对应的自动化配置类XXXAutoConfiguration查看相关源码,可以帮助我们理解其内部的实现原理,方便更深入的定制开发和问题定位。

目录
相关文章
|
3月前
|
运维 Linux Apache
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
76 3
|
9天前
|
Java 数据库连接 Maven
最新版 | SpringBoot3如何自定义starter(面试常考)
在Spring Boot中,starter是一种特殊的依赖,帮助开发人员快速引入和配置特定功能模块。自定义starter可以封装一组特定功能的依赖和配置,简化项目中的功能引入。其主要优点包括模块化、简化配置、提高代码复用性和实现特定功能。常见的应用场景有短信发送模块、AOP日志切面、分布式ID生成等。通过创建autoconfigure和starter两个Maven工程,并编写自动配置类及必要的配置文件,可以实现一个自定义starter。最后在测试项目中验证其有效性。这种方式使开发者能够更便捷地管理和维护代码,提升开发效率。
最新版 | SpringBoot3如何自定义starter(面试常考)
|
5月前
|
前端开发 JavaScript Java
【实操】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本
本文介绍了一个结合SpringBoot和Python的实用功能,旨在监控iPhone 15的库存状态并通过邮件提醒用户。系统采用SpringBoot监听苹果官网API,解析JSON数据判断是否有货,并展示最近的库存记录。此外,还能自动触发Selenium+Python脚本实现自动化购买。文中详细介绍了技术栈、接口分析、邮件配置及自动化脚本的设置方法。该项目不仅适用于熟悉后端开发的人员,也适合回顾Layui和Jquery等前端技术。
59 0
【实操】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本
|
2月前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
50 2
|
3月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
91 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
3月前
|
Linux 应用服务中间件 Shell
利用 ACME 实现SSL证书自动化配置更新
【10月更文挑战第11天】多项式承诺原理是密码学中的重要工具,允许证明者向验证者承诺一个多项式并证明其某些性质。Kate多项式承诺是一种知名方案,基于有限域上的多项式表示,通过生成和验证简洁的证明来确保多项式的正确性和隐私。其安全性基于离散对数假设。应用场景包括区块链中的零知识证明和可验证计算,以及多方计算和身份认证协议。在区块链中,Kate多项式承诺可用于保护隐私币和智能合约中的敏感信息。
175 2
|
3月前
|
缓存 NoSQL Java
Springboot自定义注解+aop实现redis自动清除缓存功能
通过上述步骤,我们不仅实现了一个高度灵活的缓存管理机制,还保证了代码的整洁与可维护性。自定义注解与AOP的结合,让缓存清除逻辑与业务逻辑分离,便于未来的扩展和修改。这种设计模式非常适合需要频繁更新缓存的应用场景,大大提高了开发效率和系统的响应速度。
90 2
|
5月前
|
持续交付 jenkins Devops
WPF与DevOps的完美邂逅:从Jenkins配置到自动化部署,全流程解析持续集成与持续交付的最佳实践
【8月更文挑战第31天】WPF与DevOps的结合开启了软件生命周期管理的新篇章。通过Jenkins等CI/CD工具,实现从代码提交到自动构建、测试及部署的全流程自动化。本文详细介绍了如何配置Jenkins来管理WPF项目的构建任务,确保每次代码提交都能触发自动化流程,提升开发效率和代码质量。这一方法不仅简化了开发流程,还加强了团队协作,是WPF开发者拥抱DevOps文化的理想指南。
104 1
|
5月前
|
持续交付 jenkins C#
“WPF与DevOps深度融合:从Jenkins配置到自动化部署全流程解析,助你实现持续集成与持续交付的无缝衔接”
【8月更文挑战第31天】本文详细介绍如何在Windows Presentation Foundation(WPF)项目中应用DevOps实践,实现自动化部署与持续集成。通过具体代码示例和步骤指导,介绍选择Jenkins作为CI/CD工具,结合Git进行源码管理,配置构建任务、触发器、环境、构建步骤、测试及部署等环节,显著提升开发效率和代码质量。
100 0
|
5月前
|
Java Spring 开发者
解锁 Spring Boot 自动化配置的黑科技:带你走进一键配置的高效开发新时代,再也不怕繁琐设置!
【8月更文挑战第31天】Spring Boot 的自动化配置机制极大简化了开发流程,使开发者能专注业务逻辑。通过 `@SpringBootApplication` 注解组合,特别是 `@EnableAutoConfiguration`,Spring Boot 可自动激活所需配置。例如,添加 JPA 依赖后,只需在 `application.properties` 配置数据库信息,即可自动完成 JPA 和数据源设置。这一机制基于多种条件注解(如 `@ConditionalOnClass`)实现智能配置。深入理解该机制有助于提升开发效率并更好地解决问题。
83 0