IDEA提示:Unregistering JMX-exposed beans on shutdown,SpringBootApplication無法啟動
剛剛在進行SpringBoot+JSP整合的時候,到了最後一步,啟動程式:提示Unregistering JMX-exposed beans on shutdown,程式根本就沒有跑起來,在網上查詢一番之後,發現是tomcat的問題。
原因在於Application 執行時缺少一個容器container。也就是說在執行時缺少一個tomcat作為容器。
我們先看一下pom.xml檔案的依賴:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--springboot內嵌的tomcat--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--jstl標籤依賴--> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> <!--用於編譯jsp的依賴,因為springboot內嵌的tomcat是不支援jsp的,所以要依賴外部的tomcat--> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> </dependencies>
我先給出解決方案吧,然後再剖析原因,以免大家著急。
解決方法就是把最下面引入的外部的tomcat依賴的scope屬性的值改為compile,如圖,我的問題就解決了。
接下來,剖析一下部分原因:
眾所周知,springboot預設對jsp沒有太多的支援。其內嵌的tomcat也不支援jsp。
因此,要想整合springboot+jsp,需要引入外部的tomcat依賴,並且打包方式選為war。
至於為什麼要改依賴的scope屬性,首先要知道該屬性擁有的值的作用。
我說一下provided和compile的區別
compile:
預設就是compile,什麼都不配置就是意味著compile。compile表示被依賴專案(即我們新增的外部tomcat)需要參與當前專案的編譯,及其後面的測試,執行週期也都會參與其中,是一個比較強的依賴。打包的時候通常需要包含進去。
【ps:由於預設就是compile,因此才會產生有些人沒有設定scope屬性,沒有報錯,結果你設定了scope,卻報錯了。說明你填充的scope屬性的值不恰當】
provided:
provided表明被依賴專案只在專案編譯和測試的時候參與,其他時候不參與。
因此也就很好的解釋了 ,為什麼最初會報錯 Application在執行的時候缺少一個容器container。因為tomcat沒有參與到執行期中。
下面這張表清楚的闡述了scope屬性的各個值參與了專案的哪些過程:
好了,本次的問題就到此結束了。如果錯誤,歡迎各位大佬批評指正哈。