avatar

目录
springboot package war

为什么要打war包?

springboot默认打包是jar包,通过java -xxx.jar命令可以直接跑起来。一般的jar包,每一个springboot项目运行后都有对应的Tomcat服务器启动,每个Tomcat占一个端口、jvm占用内存,尤其是多个springboot的jar包在一台服务器上,包不好管理且端口比较混乱,耗内存,不如启动一个Tomcat服务器,将springboot打成war包放到webapps下面统一运行管理,这样所有打成war包的项目都可以在同一个端口下运行。

操作流程

亲测的springboot版本:2.0.6.RELEASE

将pom.xml文件首部的jar改成war

xml
pom.xml
1
2
<!-- <packaging>jar</packaging>-->
<packaging>war</packaging>

去除内置的Tomcat容器(a/b两种方式都可)

  • a.去掉spring-boot-starter-tomcat(如果没有tomcat字样,忽略本步骤)

    xml
    pom.xml
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <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>
  • b.添加依赖

    xml
    pom.xml
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>

    <!--打包的时候可以不用包进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。
    相当于compile,但是打包阶段做了exclude操作-->

    <scope>provided</scope>
    </dependency>

新建启动类:主要是SpringApplicationBuilder configure 方法

  • 原xxxApplication.java启动类里面的其他东西要原封不动的搬过来(比如@MapperScan等)

    java
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @SpringBootApplication
    public class App extends SpringBootServletInitializer{
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    return builder.sources(App.class);
    }

    public static void main(String[] args) {
    SpringApplication.run(App.class, args);
    }
    }
  • 新建该类成功后,将原来的xxxApplication.java文件保留,打开文件,将里面的代码全部注释。

打包

bash
1
mvn clean package
  • 打包完成会显示 BUILD SUCCESS,war包在target目录下

测试war包

  • 在本地启动tomcat服务器,将打好的war包放到webapps目录下
  • 访问http://localhost:[端口号]/[打包项目名]/进行测试
文章作者: Bill
文章链接: http://blog.webpro.ltd/2020/01/13/springboot-package-war/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Bill's blog

评论