SpringBoot:将web项目生成war包部署到Tomcat服务
原创
©著作权归作者所有:来自51CTO博客作者奋斗咸鱼的原创作品,请联系作者获取转载授权,否则将追究法律责任
SpringBoot在Install后默认生成的是jar包,然后在JAVA命令行中通过java -a 项目.jar 的方式来运行项目。
但这种方式方便本地开发环境的调试,在生产环境中并不方便,因为web项目每次更新不可能都全站覆盖更新,不利于网站稳定性,还有附件目录、生产配置等是不能被覆盖的。
解决方案是像以前springmvc项目那也发布成war包方式(文件夹的目录形式),以后每次只要更新变动的文件即可,不会影响网站和服务的正常运行。
Springboot 发布成war包形式,需经过以下步骤。
1.将web项目的pom.xml文件中默认的jar方式改为war
<artifactId>mydemo-web</artifactId>
<version>1.0-SNAPSHOT</version>
<name>mydemo-web</name>
<!--默认为jar方式-->
<!--<packaging>jar</packaging>-->
<!--改为war方式-->
<packaging>war</packaging>
2.将内置的Tomcat容器从依赖项中排查
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.7.RELEASE</version>
<exclusions>
<!-- 排除spring-boot-starter-web中的Tomcat -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
3.修改启动类
继承SpringBootServletInitializer,实现configure方法
修改前
public class MyDemoWebApplication {
public static void main(String[] args) {
ApplicationContextapplicationContext=SpringApplication.run(MyDemoWeb.class, args);
}
}
修改后
public class MyDemoWebApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
ApplicationContext applicationContext = SpringApplication.run(MyDemo.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(MyDemo.class);
}
}
4.添加finalName
为了防止应用上下文所导致的项目访问资源加载不到的问题,
建议pom.xml文件中<build></build>标签下添加<finalName></finalName>标签
<build>
<!-- 应与application.properties(或application.yml)中context-path保持一致 -->
<finalName>mydemoweb</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>