1. 程式人生 > >IDEA提示:Unregistering JMX-exposed beans on shutdown,SpringBootApplication無法啟動

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屬性的各個值參與了專案的哪些過程:

 

好了,本次的問題就到此結束了。如果錯誤,歡迎各位大佬批評指正哈。