背景:springboot默认打成jar包,在开发的过程中,直接配置yml文件,就可以指定内嵌tomcat的端口、访问路径。但是在实际上线中还是建议打成war包部署
第一步:打包方式修改成war
<packaging>war</packaging>
第二步:移除内嵌tomcat
<!-- provided: 只在编译和测试的时候使用,打包的时候就没它了。 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
第三步:增加servlet依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
第四步:增加war插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<!--建议这个名字和yml文件中server:servlet:context-path配置成一样 -->
<warName>springboot</warName>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
第五步:程序入口类改造
/**
* 继承SpringBootServletInitializer实现configure
*/
public class DemoApplication extends SpringBootServletInitializer{
public static void main(String[] args) {
ApplicationContext app = SpringApplication.run(DemoApplication.class, args);
SpringContextUtil.setApplicationContext(app);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// 注意这里要指向原先用main方法执行的Application启动类
return builder.sources(DemoApplication.class);
}
}
第七步:
打包,去target目录下找到刚生成的war,丟到tomcat去跑一波