在使用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
问题现象
测试时发现:
@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
文件夹显示为 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
)的时候,用/
进行分割父子文件夹,别用.
来分割了
到此这篇关于spring boot3.x自动配置不生效的排查与解决:idea 文件夹命名导致的问题的文章就介绍到这了,更多相关spring boot自动配置不生效内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论