归功于Spring Boot的自动配置功能,我们不需要创建web.xml文件或者servlet初始化类来声明Spring MVC的DispatcherServlet。
首先要设置编译成war包:
<packaging>war</packaging>
然后继承SpringBootServletInitializer,并覆盖configure(SpringApplicationBuilder builder)方法,它调用sources() 方法注册了一个Spring 配置类。
本例只注册了一个Application类。这个类既是启动类(带有main()方法),也是一个Spring配置类。
Application类上添加了@SpringBootApplication注解。这会隐性开启组件扫描,而组件扫描则会发现并应用其他配置类。
package com.zgz.webinitializer; import com.zgz.Application; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.support.SpringBootServletInitializer; /** * Created by zgz on 2017/12/16. */ public class ServletInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(Application.class); } }
然后执行$ mvn package或者$ mvn install就可进行打包了,或者双击idea工具的Maven Projects下的命令进行打包:
然后将war放在本地tomcat容器就可以启动使用了,只是因为用的是本地tomcat,关于application.properties的内置tomcat的配置就无效了,
像:server.port跟server.context-path等
还有就是要注意,像我在idea进行编译,用内置tomcat启动工程的时候,使用到了如下两个依赖:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
但在构建war包的时候,可以将这两个架包去除,不然引入tomcat-embed-jasper架包会导致在本地tomcat启动报错,而javax.servlet-api在容器tomcat本身已经拥有了,无需在编译进工程。
每个容器使用Spring Boot编译的war包,可能或多或少存在一些问题,架包冲突,缺少架包,具体问题具体分析,我相信Spring Boot会越来越完美。
以上纯属个人理解,如有错误,请帮我纠正,谢谢。