SpringBoot自動(dòng)配置排除的五種方式
本文聚焦 SpringBoot 自動(dòng)配置排除的核心知識(shí)點(diǎn),涵蓋基礎(chǔ)認(rèn)知、5種實(shí)戰(zhàn)排除方式、高頻場景、排錯(cuò)技巧及面試考點(diǎn),精簡冗余內(nèi)容,保留實(shí)戰(zhàn)與面試核心,復(fù)制可用、易懂好記。
一、自動(dòng)配置核心邏輯
1. 自動(dòng)配置本質(zhì)
SpringBoot “開箱即用” 依賴自動(dòng)配置:引入 Starter 依賴(如 web、redis),啟動(dòng)時(shí)自動(dòng)加載對(duì)應(yīng)配置類、創(chuàng)建 Bean,無需手動(dòng)配置。核心載體是 spring-boot-autoconfigure 依賴中的自動(dòng)配置類(如RedisAutoConfiguration)。
2. 自動(dòng)配置觸發(fā)條件
1. 依賴存在:對(duì)應(yīng) Starter 或自動(dòng)配置類所在 jar 包已加載;
2. 條件匹配:自動(dòng)配置類上的 @Conditional 系列注解(如 @ConditionalOnClass)匹配成功。
3. 為什么需要排除自動(dòng)配置?
依賴傳遞導(dǎo)致多余加載、自定義 Bean 沖突、多環(huán)境輕量化啟動(dòng)、第三方 Starter 沖突、自定義 Starter 開發(fā),避免項(xiàng)目啟動(dòng)報(bào)錯(cuò)、資源浪費(fèi)。
二、5種排除自動(dòng)配置方式
方式1:@SpringBootApplication(exclude)
直接在啟動(dòng)類注解中指定排除的自動(dòng)配置類(Class 對(duì)象),適合固定排除少量配置。
@SpringBootApplication(exclude = {
DataSourceAutoConfiguration.class, // 排除數(shù)據(jù)源配置
RedisAutoConfiguration.class // 排除Redis配置
})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}注意:全局生效,需確保配置類可導(dǎo)入,不支持多環(huán)境。
方式2:@SpringBootApplication(excludeName)
用全類名字符串指定排除類,適配包權(quán)限限制、版本變更過渡場景。
@SpringBootApplication(excludeName = {
"org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration"
})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}注意:全類名需拼寫正確,不推薦常規(guī)使用。
方式3:配置文件排除
通過 yml/properties 配置,支持多環(huán)境動(dòng)態(tài)切換,無需修改代碼,微服務(wù)首選。
# application.yml(推薦)
spring:
autoconfigure:
exclude:
- org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
- org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration多環(huán)境配置:分別在 application-dev.yml、application-prod.yml 中配置,啟動(dòng)時(shí)指定環(huán)境(--spring.profiles.active=dev)。
方式4:@EnableAutoConfiguration(exclude)
@SpringBootApplication 底層注解,適合非標(biāo)準(zhǔn)啟動(dòng)類、自定義配置擴(kuò)展。
@Configuration
@ComponentScan(basePackages = "com.example.demo")
@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)
public class MyConfig {
// 自定義Bean配置
}方式5:autoconfigure.exclude 文件
SpringBoot 2.0+ 支持,全局統(tǒng)一排除,適合自定義 Starter、多模塊統(tǒng)一配置。
操作:resources/META-INF/spring/ 下創(chuàng)建 autoconfigure.exclude 文件,一行一個(gè)全類名。
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration
三、5種方式對(duì)比
| 排除方式 | 優(yōu)先級(jí) | 核心優(yōu)點(diǎn) | 適用場景 |
| @SpringBootApplication(exclude) | 最高 | 簡單直觀、精準(zhǔn) | 普通項(xiàng)目、固定排除 |
| @SpringBootApplication(excludeName) | 最高 | 無需導(dǎo)入Class | 無法導(dǎo)入Class場景 |
| 配置文件排除 | 中 | 支持多環(huán)境、靈活 | 微服務(wù)、多環(huán)境 |
| @EnableAutoConfiguration(exclude) | 最高 | 底層擴(kuò)展 | 非標(biāo)準(zhǔn)啟動(dòng)類 |
| autoconfigure.exclude 文件 | 最低 | 全局統(tǒng)一 | 自定義Starter |
四、實(shí)戰(zhàn)排除清單
1. 非Web服務(wù)(排除Tomcat)
@SpringBootApplication(exclude = {
ServletWebServerFactoryAutoConfiguration.class,
WebMvcAutoConfiguration.class
})2. 排除數(shù)據(jù)庫配置(解決數(shù)據(jù)源報(bào)錯(cuò))
@SpringBootApplication(exclude = {
DataSourceAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class
})3. 排除Redis配置(自定義RedisTemplate)
@SpringBootApplication(exclude = {
RedisAutoConfiguration.class,
RedisRepositoriesAutoConfiguration.class
})五、常見問題
1. 排除失敗
原因:全類名拼寫錯(cuò)誤、排除類不正確、依賴傳遞、優(yōu)先級(jí)問題;
技巧:添加 debug=true 查看自動(dòng)配置報(bào)告,核對(duì)全類名和依賴樹。
2. 配置文件排除不生效
原因:路徑/文件名錯(cuò)誤、未指定環(huán)境、注解覆蓋;
技巧:確認(rèn)配置文件加載日志,去掉注解排除測試。
3. 排除后Bean不存在報(bào)錯(cuò)
原因:排除了依賴Bean的自動(dòng)配置類;
技巧:保留必要配置類或刪除依賴該Bean的代碼。
總結(jié)
SpringBoot 自動(dòng)配置排除,看似簡單,卻是解決項(xiàng)目啟動(dòng)報(bào)錯(cuò)、避免Bean沖突的核心技巧,也是面試高頻考點(diǎn)。
其實(shí)不用死記硬背,記住兩個(gè)核心場景就夠:普通項(xiàng)目用 @SpringBootApplication(exclude),微服務(wù)多環(huán)境用配置文件排除,剩下的場景按需選擇即可。
以上就是SpringBoot自動(dòng)配置排除的五種方式的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot自動(dòng)配置排除的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java數(shù)據(jù)導(dǎo)出到Word的實(shí)現(xiàn)方案
最近業(yè)務(wù)方說周報(bào)、月報(bào)讓他們很頭疼,每次都要統(tǒng)計(jì)數(shù)據(jù)后,手動(dòng)錄入到word文檔里,希望我負(fù)責(zé)的平臺(tái)能夠提供這個(gè)功能,所以本文給大家介紹了Java數(shù)據(jù)導(dǎo)出到Word的實(shí)現(xiàn)方案,需要的朋友可以參考下2025-08-08
java連接mongoDB并進(jìn)行增刪改查操作實(shí)例詳解
這篇文章主要介紹了java連接mongoDB并進(jìn)行增刪改查操作,結(jié)合實(shí)例形式詳細(xì)分析了java環(huán)境下MongoDB擴(kuò)展包的下載、安裝及操作MongoDB連接、增刪改查等相關(guān)操作技巧,需要的朋友可以參考下2019-04-04
使用Java高效讀取Word文檔的實(shí)戰(zhàn)指南
在當(dāng)今的企業(yè)級(jí)應(yīng)用中,Word文檔作為信息承載和交流的重要載體,其自動(dòng)化處理需求日益增長,無論是批量數(shù)據(jù)提取、內(nèi)容審計(jì),還是文檔智能分析,都離不開對(duì)Word文檔內(nèi)容的有效讀取,本文將深入探討如何使用Java高效、準(zhǔn)確地 讀取Word文件,需要的朋友可以參考下2025-09-09
Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(13)
下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你2021-07-07
Java高效實(shí)現(xiàn)復(fù)制PPT(PowerPoint)幻燈片
在日常的開發(fā)工作中,我們經(jīng)常會(huì)遇到需要對(duì)Office文檔進(jìn)行編程處理的需求,本文將為您揭示如何利用強(qiáng)大的 Spire.Presentation for Java進(jìn)行PPT復(fù)制,有需要的小伙伴可以了解下2025-09-09

