spring boot啟動(dòng)出現(xiàn)Unable to start ServletWebServerApplicationContext due to missing ServletWebServer錯(cuò)誤解決
報(bào)錯(cuò)原因
今天拉下了一個(gè)新的spring boot工程,啟動(dòng)時(shí)出現(xiàn)了Unable to start web server; nested exception is org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.這個(gè)異常。在網(wǎng)上搜索這個(gè)錯(cuò)誤,有幾種說法。
說法一:是因?yàn)槿鄙僖粋€(gè)spring-boot-starter-web依賴。檢查pom文件,發(fā)現(xiàn)這個(gè)依賴已經(jīng)被引入了,所以不是這個(gè)問題。
說法二:是沒有添加@EnableAutoConfiguration這個(gè)注解。但是在啟動(dòng)類中已經(jīng)有@SpringBootApplication這個(gè)注解了,這個(gè)注解已經(jīng)包含了@EnableAutoConfiguration注解,所以也不是這個(gè)原因,那么到底是什么原因呢。

發(fā)現(xiàn)問題
可見是在調(diào)用getWebServerFactory()方法時(shí)候發(fā)生錯(cuò)誤,沒有找到ServletWebServerFactory這個(gè)bean,說明在sping容器啟動(dòng)時(shí)沒有將其注冊(cè)進(jìn)去,缺少相關(guān)依賴。沒有對(duì)應(yīng)的servelt容器,工程當(dāng)然也就啟動(dòng)不起來。這里多講一下,springboot工程會(huì)通過@EnableAutoConfiguration這個(gè)注解去拉去默認(rèn)配置,該注解通過@Import注解導(dǎo)入了AutoConfigurationImportSelector類。其實(shí)這個(gè)類,就是導(dǎo)入通過加載配置文件,加載了很多工廠方法的配置類。最終會(huì)加載 META-INF/spring.factories這些文件,通過這些文件完成自動(dòng)裝配。@Import注解加載了tomcat,jetty,undertow三個(gè)web服務(wù)器的配置類。由于沒有導(dǎo)入jetty和undertow的相關(guān)jar包,這兩個(gè)類實(shí)例的不會(huì)真正的加載。到這里分析,為什么會(huì)缺少相應(yīng)的servlet容器?springboot不默認(rèn)加載了tomcat容器嗎,因?yàn)閠omcat的相關(guān)jar包已經(jīng)在spring-boot-starter-web中引入了,按照之前我們的分析,實(shí)際上被加載的容器應(yīng)該是tomcat,為什么還會(huì)找不到呢?
那么此時(shí)我們要分析一下整個(gè)工程的依賴情況,看tomcat相關(guān)jar包是否被真實(shí)的引入。使用mvn dependency:tree命令,對(duì)工程進(jìn)行依賴分析,定位到居然無tomcat相關(guān)依賴。
此時(shí)可以發(fā)現(xiàn)pom.xml文件中,居然把tomcat排除了,那我排除的去掉即可:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>解決方法
去掉排除設(shè)置:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- <exclusions>-->
<!-- <exclusion>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-tomcat</artifactId>-->
<!-- </exclusion>-->
<!-- </exclusions>-->
</dependency>將pom中的<exclusions></exclusions>或者整個(gè)注釋掉,重新編譯測(cè)試和運(yùn)行。重新啟動(dòng)工程,啟動(dòng)成功。

到此這篇關(guān)于spring boot啟動(dòng)出現(xiàn)Unable to start ServletWebServerApplicationContext due to missing ServletWebServer錯(cuò)誤解決的文章就介紹到這了,更多相關(guān)spring boot啟動(dòng)出現(xiàn)錯(cuò)誤解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot項(xiàng)目啟動(dòng)錯(cuò)誤:找不到或無法加載主類的三種解決方法
- SpringBoot 啟動(dòng)報(bào)錯(cuò)Unable to connect to Redis server: 127.0.0.1/127.0.0.1:6379問題的解決方案
- 查看本地啟動(dòng)SpringBoot的本地端口號(hào)的幾種方式
- SpringBoot中@Scheduled實(shí)現(xiàn)服務(wù)啟動(dòng)時(shí)執(zhí)行一次
- SpringBoot應(yīng)用啟動(dòng)慢的原因分析及優(yōu)化方法
- Spring boot啟動(dòng)原理及相關(guān)組件整理
相關(guān)文章
如何基于java實(shí)現(xiàn)解壓ZIP TAR等文件
這篇文章主要介紹了如何基于java實(shí)現(xiàn)解壓ZIP TAR等文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
啟動(dòng)Tomcat時(shí)出現(xiàn)大量亂碼的解決方法
今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識(shí),文章圍繞著啟動(dòng)Tomcat時(shí)出現(xiàn)大量亂碼的解決方法展開,文中有非常詳細(xì)的介紹及圖文示例,需要的朋友可以參考下2021-06-06
SpringBoot 導(dǎo)出數(shù)據(jù)生成excel文件返回方式
這篇文章主要介紹了SpringBoot 導(dǎo)出數(shù)據(jù)生成excel文件返回方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-10-10
SpringBoot整合flyway實(shí)現(xiàn)步驟解析
這篇文章主要介紹了SpringBoot整合flyway實(shí)現(xiàn)步驟解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
springboot集成mybatisplus實(shí)例詳解
這篇文章主要介紹了springboot集成mybatisplus實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
mybatis執(zhí)行insert返回id實(shí)現(xiàn)詳解
MyBatis插入操作默認(rèn)返回受影響行數(shù),需通過useGeneratedKeys+keyProperty或selectKey獲取主鍵ID,確保主鍵為自增或序列且屬性名匹配,下面就來具體介紹一下2025-07-07
Java模擬實(shí)現(xiàn)QQ三方登錄(單點(diǎn)登錄2.0)
這篇文章主要為大家詳細(xì)介紹了Java模擬實(shí)現(xiàn)QQ三方登錄,單點(diǎn)登錄2.0,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06

