springboot打war包的全过程记录

2022-11-13 10:11:46 记录 springboot 全过程

为什么要把SpringBoot打成war包

正常情况下SpringBoot项目是以jar包的形式,通过命令行:

java -jar demo.jar

来运行的,并且SpringBoot是内嵌Tomcat服务器,所以每次重新启动都是用的新的Tomcat服务器。正因如此,也出现了一个问题:
上传到项目的文件,如果是保存在项目中的,那么重启过后文件就会丢失。比如我们上传了一个头像,重启项目后,这个头像就没了。而如果将文件保存在本地磁盘中的话,html中标签没办法获取(当然,企业项目中一般是有专门的图片服务器的)。因此,我们才需要将SpringBoot项目打成war包,放到Tomcat中去运行。

springboot打war包

默认场景下,Springboot作为一个jar运行,但是在某些特殊场景下 需要将后台和其他应用共用一个WEB容器(tomcat之类);

客户强制要求(例如策略只给了一个端口);

其他;

可以打包成war文件进行发布。

分步指南

一般情况下,将springboot工程打包为war分为以下几个步骤:

修改pom.xml,将打包方式设置为war 修改jar为war

移除springboot默认的tomcat配置

移除默认的spring-boot-starter-tomcat,使用provided

<dependency> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-starter-web</artifactId> 
        <exclusions> 
            <exclusion> 
                <groupId>org.springframework.boot</groupId> 
                <artifactId>spring-boot-starter-tomcat</artifactId> 
            </exclusion> 
        </exclusions> 
</dependency> 
<dependency> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-starter-tomcat</artifactId> 
        <scope>provided</scope> 
</dependency>

添加tomcat-servelt-api依赖

*注意根据自己的情况修改version

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.1.0</version>
  <scope>provided</scope>
</dependency>
<dependency> 
      <groupId>org.apache.tomcat</groupId> 
      <artifactId>tomcat-servlet-api</artifactId> 
      <version>8.0.36</version> 
      <scope>provided</scope> 
</dependency>

修改启动方法

增加configure配置

@SpringBootApplication
public class ServerApplication extends SpringBootServletInitializer {
   
  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    return builder.sources(ServerApplication.class);
  }
 
  public static void main(String[] args) {
    SpringApplication.run(ServerApplication.class, args);
  }
}

添加打包插件

在pom.xml的build > plugins 中添加打包插件,可以指定打包的名称等配置

<plugin> 
      <groupId>org.apache.Maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <configuration> 
          <warSourceExcludes>src/main/resources/**</warSourceExcludes> 
          <warName>yehuo</warName>
          <failOnMissingWebXml>false</failOnMissingWebXml>
      </configuration> 
</plugin>

修改项目的context-path与warName一致 修改application.properties的context-path和port等信息和实际部署的情况改为一致

server.port=server.context-path=yehuo

总结

到此这篇关于springboot打war包的文章就介绍到这了,更多相关springboot打war包内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

相关文章