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

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


在使用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.autoconfigure.AutoConfiguration.imports 文件中注册自动配置类:
      cn.com.h8k.onecoupon.framework.config.IdempotentAutoConfiguration
      

问题现象

测试时发现:

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

二、排查过程

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 文件夹显示为 META-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.springframework.boot.autoconfigure.AutoConfiguration.imports 后,重新启动项目,问题解决!

日志中成功显示:

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

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

结论 TL;DR

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


http://www.kler.cn/a/406089.html

相关文章:

  • HarmonyOS . 沉浸状态栏使用
  • VSCode快速生成vue组件模版
  • win10右键文件卡顿解决
  • C语言数据结构——详细讲解 双链表
  • 单头蜗杆铣刀计算——记录一下
  • 在 Ubuntu 系统上安装 npm 环境以及 nvm(Node Version Manager)
  • 大数据学习17之Spark-Core
  • wordpress二开-WordPress新增页面模板-说说微语
  • 深入理解TensorFlow中的形状处理函数
  • 鸿蒙MVVM模式介绍与使用
  • 数字IC后端笔试面试题库 | 经典时序Timing计算题
  • 解决复杂查询难题:如何通过 Self-querying Prompting 提高 RAG 系统效率?
  • 如何创建软件设计文档(+方法步骤)
  • Admin.NET框架前端由于keep-alive设置缓存导致的onUnmount未触发问题
  • C:mbedtls库实现https双向认证连接示例_七侠镇莫尛貝大侠20241122
  • Linux的基础开发工具
  • dockerfile构建Nginx镜像练习二(5-2)
  • 代码随想录第三十八天
  • Pulid:pure and lightning id customization via contrastive alignment
  • 华为HCCDA云技术认证--数据库服务
  • 上海乐鑫科技总代理商ESP32-C5,2.45GHz双频Wi-Fi6,高效连接更安全
  • 向量数据库FAISS之六:如何让FAISS更快
  • Memecoin市场热潮:破圈与挑战并存
  • 基于现金红包营销活动的开源 AI 智能名片与 S2B2C 商城小程序融合发展研究
  • HARCT 2025 新增分论坛6:基于机器人的智能处理控制
  • vue2 src_Todolist消息订阅版本