- 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函数。