使用springboot遇到的的异常

  • Unregistering JMX-exposed beans on shutdown
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<!--<scope>provided</scope>-->
		</dependency>

把scope删掉就可以了。

  • MainApplication.java必须位于某个包下
  • 对springboot的依赖必须放在最前面!否则Springboot的内嵌tomcat无法启动!
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:919) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
	at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
	... 24 common frames omitted 
  • 在进行mvn package之前,最好mvn clean一下,这样就能够删除target目录下的多余jar包。如果不删除多余jar包,有可能会出错。
    比如我配置了mybatis,但是没有设置datasource,这样这个应用就启动不了。而mybatis已经下载下来了,这时即便在pom中去掉mybatis,这时运行mvn package得到的war包中还是会包含mybatis,从而导致应用无法启动。
  • 初始化问题
    一般情况下,部署在服务器上要使用tomcat,本地调试直接用SpringBoot自带的tomcat
    这就需要如下写法
public class MyApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(MyApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

ServletInitializer是Servlet初始化器,意思是当本应用作为tomcat的一个webapp时,就调用configure函数,这是tomcat容器调用的,这时整个应用就相当于Servlet。
当作为SpringApplication运行时,会执行main函数,但是不会执行上面的configure函数。

原文地址:https://www.cnblogs.com/weiyinfu/p/6383468.html