SpringBoot问题集锦

    技术2022-07-11  113

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

    解决办法:

    启动类继承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函数,要通过上述方式来启动应用。 pom文件添加 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> 打包由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

    解决办法:

    要么将application.properties,该值设置为应用上下文; spring.jmx.default-domain=pays spring.jmx.enabled=true 要么关闭。 spring.jmx.enabled=false
    Processed: 0.012, SQL: 9