欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot啟動(dòng)報(bào)錯(cuò)的11個(gè)高頻問題排查與解決終極指南

 更新時(shí)間:2025年03月28日 16:26:10   作者:java修仙傳  
這篇文章主要為大家詳細(xì)介紹了SpringBoot啟動(dòng)報(bào)錯(cuò)的11個(gè)高頻問題的排查與解決,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下

1. 依賴沖突:NoSuchMethodError 的終極解法

錯(cuò)誤現(xiàn)象:

java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotationUtils.isAnnotationInherited  

原因分析:

不同版本的Spring組件沖突(如同時(shí)存在Spring Boot 2.3和2.5的依賴)。

解決方案:

Maven項(xiàng)目:運(yùn)行依賴樹分析命令定位沖突:

mvn dependency:tree -Dverbose | grep conflict  

Gradle項(xiàng)目:執(zhí)行依賴報(bào)告:

gradle dependencies > dep.txt  

在pom.xml或build.gradle中顯式聲明版本號(hào),使用<exclusions>排除舊依賴。

防坑技巧:

使用IDE插件(如IntelliJ的Maven Helper、VS Code的Gradle Lens)可視化分析依賴樹。

2. Bean注入失?。篘o qualifying bean of type 如何破?

錯(cuò)誤現(xiàn)象:

No qualifying bean of type 'com.example.UserService' available  

原因分析:

  • 未添加@Component、@Service等注解。
  • 包路徑未被@ComponentScan掃描到。
  • Bean的作用域配置錯(cuò)誤(如@Scope("prototype")導(dǎo)致延遲初始化)。

解決方案:

  • 檢查類是否添加了Spring注解。
  • 確保主類所在包包含所有Bean的路徑(或手動(dòng)指定@ComponentScan)。
  • 使用@Autowired(required = false)避免強(qiáng)制注入。

代碼示例:

@SpringBootApplication  
@ComponentScan(basePackages = "com.example") // 顯式指定掃描路徑  
public class Application { ... }  

3. 端口占用:Port 8080 already in use 的3種解決方案

錯(cuò)誤現(xiàn)象:

WebServerException: Unable to start embedded Tomcat (Port 8080 already in use)  

解決方案:

終止占用進(jìn)程:

# Linux/Mac  
lsof -i :8080 && kill -9 <PID>  
# Windows  
netstat -ano | findstr 8080 && taskkill /F /PID <PID>  

修改應(yīng)用端口:

# application.yml  
server:  
  port: 8081  

隨機(jī)端口(適合測(cè)試環(huán)境):

server:  
  port: 0  

4. 配置文件加載失?。篴pplication.yml 為何不生效?

錯(cuò)誤現(xiàn)象:

配置屬性未生效,日志無報(bào)錯(cuò)。

原因分析:

  • 文件名錯(cuò)誤(如application.yaml拼寫錯(cuò)誤)。
  • 文件未放在src/main/resources目錄下。
  • YAML語法錯(cuò)誤(如縮進(jìn)不一致)。

解決方案:

  • 檢查文件名和路徑是否符合Spring Boot規(guī)范。
  • 使用YAML校驗(yàn)工具(如在線YAML Parser)驗(yàn)證語法。

開啟配置屬性調(diào)試:

logging:  
  level:  
    org.springframework.boot.context.properties: TRACE  

5. 數(shù)據(jù)庫連接池報(bào)錯(cuò):HikariPool-1 - Exception during pool initialization

錯(cuò)誤現(xiàn)象:

HikariPool-1 - Exception during pool initialization: Connection refused  

原因分析:

數(shù)據(jù)庫URL、用戶名或密碼錯(cuò)誤。

數(shù)據(jù)庫服務(wù)未啟動(dòng)。

連接池配置超時(shí)時(shí)間過短。

解決方案:

檢查application.yml中的數(shù)據(jù)庫配置:

spring:  
  datasource:  
    url: jdbc:mysql://localhost:3306/mydb?useSSL=false  
    username: root  
    password: root  

增加連接池超時(shí)時(shí)間:

spring:  
  datasource:  
    hikari:  
      connection-timeout: 30000  

6. 主類缺失:Unable to find main class 的隱藏原因

錯(cuò)誤現(xiàn)象:

Error: Unable to find or load main class com.example.Application  

解決方案:

Maven項(xiàng)目:檢查pom.xml中是否配置了主類:

<properties>  
    <start-class>com.example.Application</start-class>  
</properties>  

Gradle項(xiàng)目:在build.gradle中指定主類:

springBoot {  
    mainClass = 'com.example.Application'  
}  

重新生成IDE項(xiàng)目文件(如執(zhí)行mvn idea:idea或gradle idea)。

7. 循環(huán)依賴:Requested bean is currently in creation

錯(cuò)誤現(xiàn)象:

BeanCurrentlyInCreationException: Error creating bean with name 'A'  

解決方案:

優(yōu)先使用構(gòu)造器注入:避免字段注入導(dǎo)致循環(huán)依賴。

延遲加載:在其中一個(gè)Bean上添加@Lazy注解。

終極方案:重構(gòu)代碼,提取公共邏輯到第三方類。

代碼示例:

@Service  
public class ServiceA {  
    private final ServiceB serviceB;  
    public ServiceA(@Lazy ServiceB serviceB) {  
        this.serviceB = serviceB;  
    }  
}  

8. JAR包沖突:ClassNotFoundException 的精準(zhǔn)定位法

錯(cuò)誤現(xiàn)象:

java.lang.ClassNotFoundException: org.apache.commons.lang3.StringUtils 

解決方案:

檢查依賴是否缺失:

<!-- Maven示例 -->  
<dependency>  
    <groupId>org.apache.commons</groupId>  
    <artifactId>commons-lang3</artifactId>  
    <version>3.12.0</version>  
</dependency>  

使用mvn clean install -U強(qiáng)制更新依賴。

檢查是否有<scope>provided</scope>錯(cuò)誤配置。

9. 緩存配置錯(cuò)誤:RedisConnectionFailureException 快速修復(fù)

錯(cuò)誤現(xiàn)象:

RedisConnectionFailureException: Unable to connect to Redis 

解決方案:

檢查Redis服務(wù)是否啟動(dòng):

redis-cli ping  # 返回PONG表示正常  

確認(rèn)配置文件中的Redis連接信息:

spring:  
  redis:  
    host: localhost  
    port: 6379  
    password: 123456  

10. 版本不兼容:Spring Boot與第三方庫的版本地獄

防坑技巧:

使用Spring Boot官方提供的依賴管理:

<dependencyManagement>  
    <dependencies>  
        <dependency>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-dependencies</artifactId>  
            <version>3.1.0</version>  
            <type>pom</type>  
            <scope>import</scope>  
        </dependency>  
    </dependencies>  
</dependencyManagement>  

11. 靜態(tài)資源加載失敗:Whitelabel Error Page 的深層原因

錯(cuò)誤現(xiàn)象:

訪問靜態(tài)資源(如HTML、JS)時(shí)返回Spring Boot默認(rèn)錯(cuò)誤頁。

原因分析:

靜態(tài)資源未放在src/main/resources/static或public目錄。

自定義攔截器(如Spring Security)攔截了靜態(tài)請(qǐng)求。

未配置歡迎頁(index.html優(yōu)先級(jí)低于控制器路由)。

解決方案:

檢查資源路徑是否符合規(guī)范:

src/main/resources/  
├── static/  
│   └── index.html  
└── public/  
    └── logo.png  

若使用Spring Security,放行靜態(tài)資源:

@Configuration  
public class SecurityConfig extends WebSecurityConfigurerAdapter {  
    @Override  
    protected void configure(HttpSecurity http) throws Exception {  
        http.authorizeRequests()  
            .antMatchers("/static/**", "/public/**").permitAll();  
    }  
}  

防坑技巧:

優(yōu)先使用classpath:/static/存放資源,避免路徑混淆。

12. Profile配置錯(cuò)誤:No active profile set 怎么辦?

錯(cuò)誤現(xiàn)象:

No active profile set, falling back to default profiles: default  

原因分析:

未通過啟動(dòng)參數(shù)、環(huán)境變量或配置文件激活Profile。

application-{profile}.yml文件命名錯(cuò)誤。

解決方案:

命令行激活:

java -jar app.jar --spring.profiles.active=prod  

環(huán)境變量激活:

export SPRING_PROFILES_ACTIVE=dev && java -jar app.jar  

配置文件硬編碼(不推薦生產(chǎn)環(huán)境):

# application.yml  
spring:  
  profiles:  
    active: dev  

防坑技巧:

生產(chǎn)環(huán)境禁止在配置文件中硬編碼active,推薦使用外部化配置(如Kubernetes ConfigMap)。

13. AOP代理問題:BeanNotOfRequiredTypeException 的坑

錯(cuò)誤現(xiàn)象:

BeanNotOfRequiredTypeException: Bean named 'userService' is expected to be of type 'com.example.UserService' but was actually of type 'jdk.proxy2.$Proxy123'  

原因分析:

JDK動(dòng)態(tài)代理生成的代理類與原始類類型不兼容。

目標(biāo)類未實(shí)現(xiàn)接口,但強(qiáng)制使用了JDK代理。

解決方案:

強(qiáng)制使用CGLIB代理(修改配置):

# application.yml  
spring:  
  aop:  
    proxy-target-class: true  

目標(biāo)類實(shí)現(xiàn)一個(gè)空接口(兼容JDK代理)。

代碼示例:

public interface UserServiceInterface {}  
 
@Service  
public class UserService implements UserServiceInterface { ... }  

14. 日志沖突:SLF4J綁定多個(gè)實(shí)現(xiàn)

錯(cuò)誤現(xiàn)象:

SLF4J: Class path contains multiple SLF4J bindings.  
SLF4J: Found binding in [jar:file:/.../logback-classic.jar!/org/slf4j/impl/StaticLoggerBinder.class]  
SLF4J: Found binding in [jar:file:/.../slf4j-log4j12.jar!/org/slf4j/impl/StaticLoggerBinder.class]  

解決方案:

Maven排除沖突依賴:

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-web</artifactId>  
    <exclusions>  
        <exclusion>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-logging</artifactId>  
        </exclusion>  
    </exclusions>  
</dependency>  
<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-log4j2</artifactId>  
</dependency>  

Gradle排除沖突:

configurations.all {  
    exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'  
}  

15. 內(nèi)存溢出:java.lang.OutOfMemoryError 的緊急處理

錯(cuò)誤現(xiàn)象:

java.lang.OutOfMemoryError: Java heap space  
// 或  
java.lang.OutOfMemoryError: Metaspace  

緊急處理:

臨時(shí)擴(kuò)容:調(diào)整JVM參數(shù)(示例為堆內(nèi)存和元空間):

java -Xmx1024m -Xms512m -XX:MaxMetaspaceSize=256m -jar app.jar  

內(nèi)存分析:

使用jmap生成堆轉(zhuǎn)儲(chǔ):

jmap -dump:format=b,file=heapdump.hprof <PID>  

使用VisualVM或Eclipse MAT分析內(nèi)存泄漏。

防坑技巧:

定期監(jiān)控生產(chǎn)環(huán)境內(nèi)存使用(如Prometheus + Grafana)。

16. 第三方庫兼容性:Jackson 序列化報(bào)錯(cuò)的秘密

錯(cuò)誤現(xiàn)象:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.example.User  

解決方案:

為實(shí)體類添加@Getter/@Setter(Lombok)或手動(dòng)實(shí)現(xiàn)getter方法。

忽略未知字段(全局配置):

spring:  
  jackson:  
    default-property-inclusion: non_null  
    deserialization:  
      FAIL_ON_UNKNOWN_PROPERTIES: false  

若使用record類,添加@JsonAutoDetect注解:

@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)  
public record User(String name) {}  

17. 安全配置錯(cuò)誤:Spring Security 的常見攔截問題

錯(cuò)誤現(xiàn)象:

請(qǐng)求被攔截返回403 Forbidden或跳轉(zhuǎn)到登錄頁。

解決方案:

放行公開資源路徑:

@Override  
protected void configure(HttpSecurity http) throws Exception {  
    http.authorizeRequests()  
        .antMatchers("/", "/login", "/css/**").permitAll()  
        .anyRequest().authenticated()  
        .and()  
        .formLogin();  
}  

禁用CSRF(僅限API項(xiàng)目):

http.csrf().disable();  

防坑技巧:

生產(chǎn)環(huán)境必須啟用CSRF保護(hù),僅對(duì)無狀態(tài)API服務(wù)可禁用。

18. 異步線程池配置:@Async 注解失效的排查

錯(cuò)誤現(xiàn)象:

@Async方法同步執(zhí)行,未觸發(fā)異步線程。

解決方案:

啟用異步支持(主類添加注解):

@SpringBootApplication  
@EnableAsync // 關(guān)鍵注解  
public class Application { ... }  

自定義線程池(避免默認(rèn)線程池阻塞):

@Configuration  
public class AsyncConfig {  
    @Bean("taskExecutor")  
    public Executor taskExecutor() {  
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();  
        executor.setCorePoolSize(10);  
        executor.setMaxPoolSize(20);  
        executor.setQueueCapacity(200);  
        executor.initialize();  
        return executor;  
    }  
}  

調(diào)用示例:

@Async("taskExecutor")  
public void asyncProcess() { ... }  

19. 熱部署失?。篋evTools 不生效的隱藏配置

錯(cuò)誤現(xiàn)象:

修改代碼后未自動(dòng)重啟。

解決方案:

IDE配置:

  • IntelliJ: Settings → Build → Compiler → Build project automatically
  • Eclipse: 啟用Project → Build Automatically

添加DevTools依賴:

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-devtools</artifactId>  
    <scope>runtime</scope>  
    <optional>true</optional>  
</dependency>  

排除靜態(tài)資源重啟(提升速度):

spring:  
  devtools:  
    restart:  
      exclude: static/**,public/**  

20. 玄學(xué)報(bào)錯(cuò):日志一片空白時(shí)如何自救?

錯(cuò)誤現(xiàn)象:

應(yīng)用啟動(dòng)后無任何日志輸出。

解決方案:

檢查logback-spring.xml或log4j2.xml是否存在配置錯(cuò)誤。

強(qiáng)制指定日志級(jí)別:

logging:  
  level:  
    root: INFO  

添加默認(rèn)日志依賴:

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-logging</artifactId>  
</dependency>  

終極防坑指南

原子化驗(yàn)證:每修改一個(gè)配置后立即測(cè)試,避免多個(gè)變更疊加導(dǎo)致問題復(fù)雜化。

日志級(jí)別控制:遇到問題時(shí)將日志級(jí)別調(diào)整為DEBUG或TRACE:

logging:  
  level:  
    root: DEBUG  
    org.springframework: TRACE  

最小化復(fù)現(xiàn):提取核心代碼到獨(dú)立Demo項(xiàng)目,排除無關(guān)依賴干擾。

以上就是SpringBoot啟動(dòng)報(bào)錯(cuò)的11個(gè)高頻問題排查與解決終極指南的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot啟動(dòng)報(bào)錯(cuò)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Maven搭建springboot項(xiàng)目的方法步驟

    Maven搭建springboot項(xiàng)目的方法步驟

    這篇文章主要介紹了Maven搭建springboot項(xiàng)目的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 解決idea中servlet報(bào)紅問題

    解決idea中servlet報(bào)紅問題

    這篇文章主要介紹了解決idea中servlet報(bào)紅問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • SpringBoot項(xiàng)目啟動(dòng)執(zhí)行任務(wù)的多種方法小結(jié)

    SpringBoot項(xiàng)目啟動(dòng)執(zhí)行任務(wù)的多種方法小結(jié)

    這篇文章主要介紹了SpringBoot項(xiàng)目啟動(dòng)執(zhí)行任務(wù)的多種方法小結(jié),本文給大家分享的這幾種方法經(jīng)常會(huì)被用到,當(dāng)我們的項(xiàng)目啟動(dòng)后需要調(diào)用對(duì)應(yīng)的方法,用來項(xiàng)目的初始化等,本文通過示例代碼講解的非常詳細(xì),需要的朋友參考下吧
    2023-07-07
  • IDEA?2022最新激活碼注冊(cè)碼超詳細(xì)教程(親測(cè)激活有效)

    IDEA?2022最新激活碼注冊(cè)碼超詳細(xì)教程(親測(cè)激活有效)

    這篇文章主要介紹了IDEA?2022最新激活碼超詳細(xì)教程(親測(cè)激活至2099年),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • PageHelper插件實(shí)現(xiàn)服務(wù)器端分頁功能

    PageHelper插件實(shí)現(xiàn)服務(wù)器端分頁功能

    這篇文章主要為大家詳細(xì)介紹了PageHelper插件實(shí)現(xiàn)服務(wù)器端分頁功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • JDK動(dòng)態(tài)代理與CGLib動(dòng)態(tài)代理的區(qū)別對(duì)比

    JDK動(dòng)態(tài)代理與CGLib動(dòng)態(tài)代理的區(qū)別對(duì)比

    今天小編就為大家分享一篇關(guān)于JDK動(dòng)態(tài)代理與CGLib動(dòng)態(tài)代理的區(qū)別對(duì)比,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Java list foreach修改元素方式

    Java list foreach修改元素方式

    這篇文章主要介紹了Java list foreach修改元素方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • JDK-StringJoiner構(gòu)造及添加元素源碼分析

    JDK-StringJoiner構(gòu)造及添加元素源碼分析

    這篇文章主要為大家介紹了JDK-StringJoiner構(gòu)造及添加元素源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • 如何處理后臺(tái)向前臺(tái)傳遞的json數(shù)據(jù)

    如何處理后臺(tái)向前臺(tái)傳遞的json數(shù)據(jù)

    這篇文章主要介紹了如何處理后臺(tái)向前臺(tái)傳遞的json數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 淺談SpringCloud實(shí)現(xiàn)簡(jiǎn)單的微服務(wù)架構(gòu)

    淺談SpringCloud實(shí)現(xiàn)簡(jiǎn)單的微服務(wù)架構(gòu)

    Spring Cloud是一系列框架的有序集合,本文就使用SpringCloud實(shí)現(xiàn)一套簡(jiǎn)單的微服務(wù)架構(gòu),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01

最新評(píng)論