Spring Boot3.x自動(dòng)配置不生效的排查與解決方法(IDEA 文件夾命名導(dǎo)致的問題)
在使用Spring Boot
搭建多模塊項(xiàng)目時(shí),需要使用到自動(dòng)配置功能,把一些通用功能封裝成模塊后通過META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
文件注冊配置類。然而,最近遇到一個(gè)奇怪的問題:
1.自動(dòng)配置類怎么都不生效
最終排查發(fā)現(xiàn),問題竟然出在文件路徑上!這篇文章記錄一下問題的經(jīng)過和解決方法。
一、問題描述
項(xiàng)目背景
1.使用版本:Spring Boot 3.x。
2.模塊設(shè)計(jì):
- framework 模塊:實(shí)現(xiàn)了一個(gè)冪等注解
@Idempotent
,通過切面類IdempotentAspect
攔截方法,并用IdempotentAutoConfiguration
注入。 - 測試模塊:引入
framework
模塊,測試冪等注解是否生效。
3.配置方式:
- 在
framework
模塊的src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
文件中注冊自動(dòng)配置類:
cn.com.h8k.onecoupon.framework.config.IdempotentAutoConfiguration
問題現(xiàn)象
測試時(shí)發(fā)現(xiàn):
@Idempotent
注解沒有觸發(fā)切面邏輯。- 日志里沒有加載
IdempotentAutoConfiguration
的相關(guān)信息。 - 即使加了調(diào)試代碼和日志,仍然沒有任何效果。
二、排查過程
1. 確認(rèn)自動(dòng)配置文件路徑和內(nèi)容
首先檢查了 AutoConfiguration.imports
文件的位置和內(nèi)容是否正確:
- 路徑:
src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
- 內(nèi)容:確認(rèn)類名拼寫無誤。
但是問題依然存在,懷疑是自動(dòng)配置類根本沒有被 Spring Boot 加載。
2. 驗(yàn)證自動(dòng)配置類是否加載
在自動(dòng)配置類 IdempotentAutoConfiguration
中添加靜態(tài)代碼塊或日志輸出,判斷是否加載:
@AutoConfiguration public class IdempotentAutoConfiguration { static { System.out.println("IdempotentAutoConfiguration 加載成功!"); } }
重新啟動(dòng)項(xiàng)目后,依然沒有看到任何輸出。說明自動(dòng)配置類根本沒有被 Spring Boot 掃描到。
3. 檢查 META-INF 文件夾的實(shí)際路徑
仔細(xì)查看項(xiàng)目結(jié)構(gòu)時(shí),發(fā)現(xiàn) META-INF/spring
文件夾顯示為 META-INF.spring
,這引起了注意。
原因分析:
在 IntelliJ IDEA
中,新建文件夾 META-INF/spring
后,IDEA 默認(rèn)顯示為 META-INF.spring
。如果直接在這個(gè)路徑下創(chuàng)建文件,實(shí)際路徑就會(huì)變成錯(cuò)誤的 META-INF.spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
。
最終確認(rèn):文件路徑寫錯(cuò)了,Spring Boot 無法找到自動(dòng)配置文件。
4. 修正路徑并驗(yàn)證
將文件移動(dòng)到正確路徑 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
后,重新啟動(dòng)項(xiàng)目,問題解決!
日志中成功顯示:
Positive matches: ----------------- IdempotentAutoConfiguration
測試時(shí),@Idempotent
注解也正常生效,切面邏輯開始運(yùn)行。
結(jié)論 TL;DR
切記,在resources
中創(chuàng)建多級(jí)文件夾(new directory
)的時(shí)候,用/
進(jìn)行分割父子文件夾,別用.
來分割了
到此這篇關(guān)于Spring Boot3.x自動(dòng)配置不生效的排查與解決:IDEA 文件夾命名導(dǎo)致的問題的文章就介紹到這了,更多相關(guān)Spring Boot自動(dòng)配置不生效內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mybatis集成Spring的實(shí)例代碼_動(dòng)力節(jié)點(diǎn)Java 學(xué)院整理
這篇文章主要介紹了Mybatis集成Spring的實(shí)例代碼,需要的朋友可以參考下2017-09-09簡單注解實(shí)現(xiàn)集群同步鎖(spring+redis+注解)
本文主要介紹了簡單注解實(shí)現(xiàn)集群同步鎖的步驟與方法。具有一定的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01解決Javaweb 提交表單到servlet時(shí)出現(xiàn)空白頁面,但網(wǎng)站不報(bào)錯(cuò)問題
這篇文章主要介紹了解決Javaweb 提交表單到servlet時(shí)出現(xiàn)空白頁面,但網(wǎng)站不報(bào)錯(cuò)的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08elasticsearch數(shù)據(jù)信息索引操作action?support示例分析
這篇文章主要為大家介紹了elasticsearch數(shù)據(jù)信息索引操作action?support示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04Java 14 發(fā)布了,你還會(huì)使用Lombok?
2020年3月17日發(fā)布,Java正式發(fā)布了JDK 14 ,目前已經(jīng)可以開放下載。在JDK 14中,共有16個(gè)新特性,本文主要來介紹其中的一個(gè)特性:JEP 359: Records,需要的朋友可以參考下2020-04-04Java數(shù)據(jù)結(jié)構(gòu)之圖的路徑查找算法詳解
這篇文章主要為大家詳細(xì)介紹了java數(shù)據(jù)結(jié)構(gòu)中圖的路徑查找算法,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-11-11Java for each實(shí)現(xiàn)機(jī)制代碼原理解析
這篇文章主要介紹了Java for each實(shí)現(xiàn)機(jī)制代碼原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06SpringBoot的啟動(dòng)過程源碼詳細(xì)分析
這篇文章主要介紹了SpringBoot的啟動(dòng)過程源碼詳細(xì)分析,SpringBoot啟動(dòng)的時(shí)候,會(huì)構(gòu)造一個(gè)SpringApplication的實(shí)例,構(gòu)造SpringApplication的時(shí)候會(huì)進(jìn)行初始化的工作,需要的朋友可以參考下2023-11-11