springboot打war包的全过程记录

 更新时间:2022年06月21日 09:04:10   作者:董泽琦  
其实一般使用springboot使用打成jar包比较省事的,但也有很多童鞋是习惯使用war包的,下面这篇文章主要给大家介绍了关于springboot打war包的相关资料,需要的朋友可以参考下

为什么要把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包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java中动态代理的实现

    java中动态代理的实现

    本篇文章主要介绍了Java中两种动态代理的实现:jdk动态代理;cglib动态代理。具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • Idea启动多个SpringBoot项目的3种最新方案

    Idea启动多个SpringBoot项目的3种最新方案

    SpringBoot自带Tomcat,直接运行main方法里面的SpringApplication.run即可,并且访问时不需要带项目名,这篇文章主要介绍了Idea启动多个SpringBoot项目的3种方案,需要的朋友可以参考下
    2023-02-02
  • Java中常见的对象转换工具

    Java中常见的对象转换工具

    对象进行对象的转换是一个操作重复且繁琐的工作,于是市面上就有许多的对象转换工具来解决这个问题,下面我们就来看看几个比较常用的工具(mapstruct,Spring BeanUtils,Apache BeanUtils)使用方式及其性能
    2023-04-04
  • java开发Dubbo注解Adaptive实现原理

    java开发Dubbo注解Adaptive实现原理

    这篇文章主要为大家介绍了java开发Dubbo注解Adaptive实现原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Java工具类DateUtils实例详解

    Java工具类DateUtils实例详解

    这篇文章主要为大家详细介绍了Java工具类DateUtils实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • spring实现动态切换、添加数据源及源码分析

    spring实现动态切换、添加数据源及源码分析

    这篇文章主要给大家介绍了关于spring实现动态切换、添加数据源及源码分析的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • intellij idea旗舰版解决学生无法注册问题详解

    intellij idea旗舰版解决学生无法注册问题详解

    这篇文章主要介绍了intellij idea旗舰版解决学生无法注册问题详解,文中通过图文示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Java集合包中的fail fast机制详解

    Java集合包中的fail fast机制详解

    这篇文章主要介绍了Java集合包中的fail fast机制详解,当我们使用iterator迭代器遍历一个集合的过程中,如果其它线程,或者它自己向这个集合新增或删除了一个key-value,那么当前线程就会抛出ConcurrentModificationException异常,需要的朋友可以参考下
    2023-12-12
  • java文件下载设置中文名称的实例(response.addHeader)

    java文件下载设置中文名称的实例(response.addHeader)

    下面小编就为大家分享一篇java文件下载设置中文名称的实例(response.addHeader),具有很好的参考价值,希望对大家有所帮助
    2017-12-12
  • jvm字符串常量池在什么内存区域问题解析

    jvm字符串常量池在什么内存区域问题解析

    这篇文章主要介绍了jvm字符串常量池在什么内存区域的问题解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11

最新评论