spring boot啟動出現(xiàn)Unable to start ServletWebServerApplicationContext due to missing ServletWebServer錯誤解決
報錯原因
今天拉下了一個新的spring boot工程,啟動時出現(xiàn)了Unable to start web server; nested exception is org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.這個異常。在網(wǎng)上搜索這個錯誤,有幾種說法。
說法一:是因為缺少一個spring-boot-starter-web依賴。檢查pom文件,發(fā)現(xiàn)這個依賴已經(jīng)被引入了,所以不是這個問題。
說法二:是沒有添加@EnableAutoConfiguration這個注解。但是在啟動類中已經(jīng)有@SpringBootApplication這個注解了,這個注解已經(jīng)包含了@EnableAutoConfiguration注解,所以也不是這個原因,那么到底是什么原因呢。
發(fā)現(xiàn)問題
可見是在調(diào)用getWebServerFactory()方法時候發(fā)生錯誤,沒有找到ServletWebServerFactory這個bean,說明在sping容器啟動時沒有將其注冊進(jìn)去,缺少相關(guān)依賴。沒有對應(yīng)的servelt容器,工程當(dāng)然也就啟動不起來。這里多講一下,springboot工程會通過@EnableAutoConfiguration這個注解去拉去默認(rèn)配置,該注解通過@Import注解導(dǎo)入了AutoConfigurationImportSelector類。其實這個類,就是導(dǎo)入通過加載配置文件,加載了很多工廠方法的配置類。最終會加載 META-INF/spring.factories這些文件,通過這些文件完成自動裝配。@Import注解加載了tomcat,jetty,undertow三個web服務(wù)器的配置類。由于沒有導(dǎo)入jetty和undertow的相關(guān)jar包,這兩個類實例的不會真正的加載。到這里分析,為什么會缺少相應(yīng)的servlet容器?springboot不默認(rèn)加載了tomcat容器嗎,因為tomcat的相關(guān)jar包已經(jīng)在spring-boot-starter-web中引入了,按照之前我們的分析,實際上被加載的容器應(yīng)該是tomcat,為什么還會找不到呢?
那么此時我們要分析一下整個工程的依賴情況,看tomcat相關(guān)jar包是否被真實的引入。使用mvn dependency:tree命令,對工程進(jìn)行依賴分析,定位到居然無tomcat相關(guān)依賴。
此時可以發(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>或者整個注釋掉,重新編譯測試和運(yùn)行。重新啟動工程,啟動成功。
到此這篇關(guān)于spring boot啟動出現(xiàn)Unable to start ServletWebServerApplicationContext due to missing ServletWebServer錯誤解決的文章就介紹到這了,更多相關(guān)spring boot啟動出現(xiàn)錯誤解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringQuartz定時任務(wù)核心組件JobDetail與Trigger配置
Spring框架與Quartz調(diào)度器的集成提供了強(qiáng)大而靈活的定時任務(wù)解決方案,本文主要介紹了SpringQuartz定時任務(wù)核心組件JobDetail與Trigger配置,具有一定的參考價值,感興趣的可以了解一下2025-04-04JAVA Stack詳細(xì)介紹和示例學(xué)習(xí)
JAVA Stack是棧。它的特性是:先進(jìn)后出(FILO, First In Last Out)。2013-11-11SpringBoot自帶模板引擎Thymeleaf使用示例詳解
Thymeleaf是一款用于渲染XML/HTML5內(nèi)容的模板引擎,類似JSP,它可以輕易的與SpringMVC等Web框架進(jìn)行集成作為Web應(yīng)用的模板引擎,本文給大家介紹SpringBoot自帶模板引擎Thymeleaf使用示例,感興趣的朋友一起看看吧2023-12-12