开发者

Spring Boot3.x自动配置不生效的排查与解决方法(IDEA 文件夹命名导致的问题)

目录
  • 一、问题描述
  • 问题现象
  • 二、排查过程
    • 1. 确认自动配置文件路径和内容
    • 2. 验证自动配置类是否加载
    • 3. 检查 META-INF 文件夹的实际路径
    • 4. 修正路径并验证
  • 结论 TL;DR

    在使用Spring Boot搭建多模块项目时,需要使用到自动配置功能,把一些通用功能封装成模块后通过

    META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

    文件注册配置类。然而,最近遇到一个奇怪的问题:

    1.自动配置类怎么都不生效

    最终排查发现,问题竟然出在文件路径上!这篇文章记录编程客栈一下问题的经过和解决方法。

    一、问题描述

    项目背景

    1.使用版本:Spring Boot 3.x。

    2.模块设计

    • framework 模块:实现了一个幂等注解 @Idempotent,通过切面类 IdempotentASPect 拦截方法,并用 IdempotentAutoConfiguration 注入。
    • 测试模块:引入 framework 模块,测试幂等注解是否生效。

    3.配置方式

    • framework 模块的 src/main/resources/META-INF/spring/org.springframework.boot.auandroidtoconfigure.AutoConfiguration.imports 文件中注册自动配置类:
    cn.com.h8k.onecoupon.framework.config.IdempotentAutoConfiguration

    问题现象

    测试时发现:

    • @Idempotent 注解没有触发切面逻辑。
    • 日志里没有加载 IdempotentAutoConfiguration 的相关信息。
    • 即使加了调试代码和日志,仍然没有任何效果。

    二、排查过程

    1. 确认自动配置文件路径和内容

    首先检查了 AutoConfiguration.imports 文件的位置和内容是否正确:

    • 路径:src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
    • 内容:确认类名拼写无误。

    但是问题依然存在,怀疑是自动配置类根本没有被 Spring Boot 加载。

    2. 验证自动配置类是否加载

    在自动配置类 IdempotentAutoConfiguration 中添加静态代码块或日志输出,判断是否加载:

    @AutoConfiguration
    public class IdempotentAutoConfiguration {
        static {
            System.out.println("IdempotentAutoConfiguration 加载成功!");
        }
    }

    重新启动项目后,依然没有看到任何输出。说明自动配置类根本没有被 Spring Boot 扫描到。

    3. 检查 META-INF 文件夹的实际路径

    仔细查看项目结构时,发现 META-INF/spring 文件夹显示为 MEjavascriptTA-INF.spring,这引起了注意。

    原因分析:

    IntelliJ IDEA 中,新建文件夹 META-INF/spring 后,IDEA 默认显示为 META-INF.spring。如果直接在这个路径下创建文件,实际路径就会变成错误的 META-INF.spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

    最终确认:文件路径写错了,Spring Boot 无法找到自动配置文件。

    4. 修正路径并验证

    将文件移动到正确路径 META-INF/spring/org.spriSaRYPIpUngframework.boot.autoconfigure.AutoConfiguration.imports 后,重新启动项目,问题解决!

    日志中成功显示:

    Positive matches:
    -----------------
    IdempotentAutoConfiguration

    测试时,@Idempotent 注解也正常生效,切面逻辑开始javascript运行。

    结论 TL;DR

    切记,在resources中创建多级文件夹(new directory)的时候,用/进行分割父子文件夹,别用.来分割了

    Spring Boot3.x自动配置不生效的排查与解决方法(IDEA 文件夹命名导致的问题)

    到此这篇关于Spring Boot3.x自动配置不生效的排查与解决:IDEA 文件夹命名导致的问题的文章就介绍到这了,更多相关Spring Boot自动配置不生效内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜