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

news2024/11/20 10:10:01

在使用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.coloradmin.cn/o/2243978.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaSE(十四)——文件操作和IO

文章目录 文件操作和IO文件相关概念Java操作文件文件系统操作文件内容操作字节流FileOutputStreamFileInputStream代码演示 字符流FileWriterFileReader代码演示 缓冲流转换流 案例练习 文件操作和IO 文件相关概念 文件 通常指的是包含用户数据的文件,如文本文件、…

Qt桌面应用开发 第五天(常用控件)

目录 1.QPushButton和ToolButton 1.1QPushButton 1.2ToolButton 2.RadioButton和CheckBox 2.1RadioButton单选按钮 2.2CheckBox多选按钮 3.ListWidget 4.TreeWidget控件 5.TableWidget控件 6.Containers控件 6.1QScrollArea 6.2QToolBox 6.3QTabWidget 6.4QStacke…

Vue.js 插槽 Slots 实际应用 最近重构项目的时候遇到的...

前端开发中 插槽 Slots 是一个重要的概念 我们可以查看一下vue.js的官方文档 https://cn.vuejs.org/guide/components/slots 类似于连接通道一样 可以把核心代码逻辑搬到另外的地方 做一个引用 而原先的地方可能并不能这样书写 对于这个概念我在vue的官方文档里面找到了…

ubuntu pytorch容器内安装gpu版本的ffmpeg

一、基础镜像和生成容器 pytorch/pytorch :1.13.1-cuda11.6-cudnn8-devel 生成容器,一定要加NVIDIA_DRIVER_CAPABILITIEScompute,utility,video,graphics,否则侯建无法推流,报错缺少编码之类的。 docker run -it --gpus all -e …

VSCode+ESP-IDF开发ESP32-S3-DevKitC-1(2)第一个工程 LED心跳灯

VSCodeESP-IDF开发ESP32-S3-DevKitC-1(2)第一个工程 LED心跳灯 前言1.新建工程2.编写控制LED代码3.LED控制独立成.c和.h文件 前言 实际开发中很多时候我们需要有一个类似心跳灯或运行指示灯的灯以不同的状态闪烁以表示程序的运行状态,所以第…

在ubunto18.04安装node 14.16.0

这里演示安装node 14.16.0,其他版本也一样的安装步骤,需要注意1 1.检查本机服务器类型,有的是x64,有的是ARM,先查清楚是什么类型再进行下载,否则会存在编译出错的问题 bash: /opt/node-v14.16.0-linux-x6…

基于YOLOv8深度学习的智慧农业猪行为检测系统研究与实现(PyQt5界面+数据集+训练代码)

随着智慧农业的快速发展,畜牧业的智能化管理已逐渐成为提高生产效率、提升动物福利、降低运营成本的关键手段之一。在此背景下,畜牧场对动物行为的自动化监测需求日益增长,尤其是在大型养猪场,猪群的日常行为检测对于疾病预防、饲…

独立资源池与共享资源池在云计算中各自的优势

在云计算领域,独立资源池和共享资源池是两种关键的资源管理策略,它们各自具有独特的优势,以适应不同的业务需求和场景。 独立资源池的优势 资源独占性:独立资源池为特定应用或用户提供专属的资源,这意味着资源不会被其…

异或和之和

//暴力做法 枚举每个子区间 O(n^3) //优化1 利用前缀异或和快速求出区间异或和 O(n^2) //优化2 处理位运算的常用方法:拆位法 常用的思想:贡献法思想 下面详见优化2: 1.拆位贡献法 2.实战真题1 题目链接:1.异或和之和 - 蓝桥…

【金融风控项目-07】:业务规则挖掘案例

文章目录 1.规则挖掘简介2 规则挖掘案例2.1 案例背景2.2 规则挖掘流程2.3 特征衍生2.4 训练决策树模型2.5 利用结果划分分组 1.规则挖掘简介 两种常见的风险规避手段: AI模型规则 如何使用规则进行风控 **使用一系列逻辑判断(以往从职人员的经验)**对客户群体进行区…

第8章硬件维护-8.2 可维护性和可靠性验收

8.2 可维护性和可靠性验收 可维护性和可靠性验收非常重要,硬件维护工程师在后端发现问题后,总结成可维护性和可靠性需求,在产品立项的时候与新特性一起进行需求分析,然后经过设计、开发和测试环节,在产品中落地。这些需…

在k8s上部署minio

一、 环境 已部署k8s,支持helm部署 二、添加Minio Helm Chart仓库 helm repo add bitnami https://charts.bitnami.com/bitnami -n your_namespace helm repo update -n your_namespace部署带tls的minio helm install minio-s3 bitnami/minio -n your_namespace…

gtest 框架

基本了解 google提供的一个C测试框架,主要就是简化测试单元的书写,具有高效、灵活可拓展的特点 主要特点 简单易用:gtest 提供了清晰且易于使用的 API,便于开发者快速编写单元测试。丰富的断言支持:gtest 提供了多种断…

机器学习—误差分析

帮助运行诊断的最重要的方法是选择下一步要尝试的内容,提高你的学习算法性能,偏差和方差可能是最重要的想法,然后是错误分析。 假设Mcv500,即有500个交叉验证示例,你的算法错误的分类了100个,错误分析过程…

微知-如何查看BlueField DPU上的内存信息,包括内存主频和位宽?(dmidecode -t memory)

背景 在定位DPU上网卡性能的时候,可能涉及到查看内存的主频、位宽、电压等信息,如何快速查看? 命令 dmidecode -t memory实操 可以看到主频是 3200MT/s,另外还能看到位宽,大小,电压等信息。

【AI系统】AI系统架构的组成

AI 系统组成 如图所示,大致可以将 AI 系统分为以下几个具体的方向: AI 训练与推理框架 AI 框架不仅仅是指如 PyTorch 等训练框架,还包括推理框架。其负责提供用户前端的 AI 编程语言,接口和工具链。负责静态程序分析与计算图构建…

竞赛思享会 | 2024年第十届数维杯国际数学建模挑战赛D题【代码+演示】

Hello,这里是Easy数模!以下idea仅供参考,无偿分享! 题目背景 本题旨在通过对中国特定城市的房产、人口、经济、服务设施等数据进行分析,评估其在应对人口老龄化、负增长趋势和极端气候事件中的韧性与可持续发展能力。…

机器学习基础07

目录 1.逻辑回归 1.1原理 1.2API 2.K-Means 2.1算法过程 2.2API 3.SVM(支持向量机) 3.1算法原理​ 3.2API 1.逻辑回归 逻辑回归(Logistic Regression)是机器学习中的一种分类模型,逻辑回归是一种分类算法。 1.1原理 逻辑回归的输…

基于python的在线投票系统小程序u9t2g.

目录 项目介绍开发技术具体实现截图微信开发者工具介绍技术路线开发语言以及框架介绍python-flask核心代码部分展示python-django核心代码部分展示详细视频演示源码获取 项目介绍 投票系统用户端是基于微信小程序,管理员端是基于web网页端, &#xff0c…

android 使用MediaPlayer实现音乐播放--权限请求

在Android应用中,获取本地音乐文件的权限是实现音乐扫描功能的关键步骤之一。随着Android版本的不断更新,从Android 6.0(API级别23)开始,应用需要动态请求权限,而到了android 13以上需要的权限又做了进一步…