SpringBoot问题集锦

本文汇总了SpringBoot应用在部署到外置Tomcat时遇到的三个主要问题及其解决策略:1) 应用无响应,解决方法是让启动类继承SpringBootServletInitializer并调整pom.xml打包类型;2) UnsatisfiedDependencyException,原因是不同jar包版本冲突,需统一版本;3) UnableToRegisterMBeanException,可通过修改application.properties的上下文路径或关闭JMX注册。
该文章已生成可运行项目,

问题一: SpringBoot应用部署在外置Tomcat中没有启动,无任何反应

解决办法:

  1. 启动类继承SpringBootServletInitializer并实现configure方法;
@SpringBootApplication
public class PaysApplication extends SpringBootServletInitializer {

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
		return builder.sources(PaysApplication.class);
	}

	public static void main(String[] args) {
		SpringApplication.run(PaysApplication.class, args);
	}
}
  • 继承SpringBootServletInitializer 的作用与在web.xml文件中配置负责初始化Spring应用上下文监听器作用类似;
  • 外部容器部署,不能依赖于main函数,要通过上述方式来启动应用。
  1. pom文件添加
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

  1. 打包由jar变为war
<packaging>war</packaging>

问题二:SpringBoot部署在外置Tomcat中启动报错:org.springframework.beans.factory.UnsatisfiedDependencyException

错误详情:

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.hikvision.notify.conf.consumer.ServiceChangeConfig': Unsatisfied dependency expressed through field 'serviceChangeConsumers'; 

解决办法:该错误是因为mvn引入存在多个版本jar包,统一项目引入的jar包的版本,即可修复。

问题三:SpringBoot部署在外置Tomcat中启动报错: org.springframework.jmx.export.UnableToRegisterMBeanException

错误详情:

Caused by: org.springframework.jmx.export.UnableToRegisterMBeanException: Unable to register MBean [org.springframework.cloud.context.environment.EnvironmentManager@5f0ec3c1] with key 'environmentManager'; nested exception is javax.management.InstanceAlreadyExistsException: test:name=environmentManager,type=EnvironmentManager
		at org.springframework.jmx.export.MBeanExporter.registerBeanNameOrInstance(MBeanExporter.java:626)
		at org.springframework.jmx.export.MBeanExporter.lambda$registerBeans$2(MBeanExporter.java:552)
		at java.base/java.util.HashMap.forEach(HashMap.java:1336)
		at org.springframework.jmx.export.MBeanExporter.registerBeans(MBeanExporter.java:552)
		at org.springframework.jmx.export.MBeanExporter.afterSingletonsInstantiated(MBeanExporter.java:435)
		at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:864)
		at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877)
		at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)
		at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
		at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:744)
		at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:391)
		at org.springframework.boot.SpringApplication.run(SpringApplication.java:312)
		at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:151)
		at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:131)
		at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:91)
		at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:172)
		at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5152)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		... 10 more
	Caused by: javax.management.InstanceAlreadyExistsException: test:name=environmentManager,type=EnvironmentManager
		at java.management/com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:436)
		at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerWithRepository(DefaultMBeanServerInterceptor.java:1855)
		at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:955)
		at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:890)
		at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:320)
		at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:522)
		at org.springframework.jmx.support.MBeanRegistrationSupport.doRegister(MBeanRegistrationSupport.java:138)
		at org.springframework.jmx.export.MBeanExporter.registerBeanInstance(MBeanExporter.java:680)
		at org.springframework.jmx.export.MBeanExporter.registerBeanNameOrInstance(MBeanExporter.java:616)
		... 27 more

解决办法:

  1. 要么将application.properties,该值设置为应用上下文;
spring.jmx.default-domain=pays
spring.jmx.enabled=true
  1. 要么关闭。
spring.jmx.enabled=false
本文章已经生成可运行项目
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值