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属性的各个值参与了项目的哪些过程:

好了,本次的问题就到此结束了。如果错误,欢迎各位大佬批评指正哈。

猜你喜欢

转载自blog.csdn.net/weixin_42652696/article/details/83547215