# SpringBoot 项目打成 war 并发布到云服务器

# 打包方式

  1. jar:服务化概念,后续学完 spring cloud 后,所有的服务打包都是以 jar 包形式
  2. war:应用程序的概念,也可以向外提供服务和接口

# 打成 war 包配置

spring boot 默认是 jar 包方式,修改成 war 包方式如下:

  1. 修改 api 打成 war 包

    <!--    <packaging>jar</packaging>-->
        <!-- 打包 war 1:由 jar 包改成 war 包 -->
        <packaging>war</packaging>
    
    1
    2
    3
  2. spring boot 依赖了一个 tomcat-embed-el 的依赖包,该包是由 spring-boot-starter-web 引入的 spring-boot-starter-tomcat 包引用的,所以需要排除这个包

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <exclusions>
                    <!-- 打包 war 2:移除内置的 tomcat -->
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-tomcat</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    这个配置方式官网文档也有的。

  3. 由于移除了 tomcat 依赖,那么一些依赖包,如 servlet 等就没有了,需要自定义引入

            <!-- 打包 war 3:添加依赖 -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <scope>provided</scope>
            </dependency>
    
    1
    2
    3
    4
    5
    6
  4. 增加 war 包启动类入口

    package cn.mrcode.foodiedev;
    
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
    
    /**
     * war 包启动4: 启动类
     *
     * @author mrcode
     * @date 2021/2/28 21:40
     */
    public class WarStarterApplication extends SpringBootServletInitializer {
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
            // 指向之前的启动类
            return builder.sources(Application.class);
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
  5. application.yml 配置文件中修改为 prod 环境

    spring:
      profiles:
        active: prod
    
    1
    2
    3

    还是比较麻烦的,需要各种地方修改配置文件

最后运行 maven 的 install 或则 package,就打成 war 包了。

# 部署到服务器

将 war 包修改名称为 foodie-dev-api.war 然后上传到后端服务器 192.168.56.107 的 tomcat 目录 /usr/local/tomcat-api/webapps

没有问题的话,应该就可以通过地址 http://192.168.56.107:8080/foodie-dev-api/hello 访问到服务了

同样也可以访问 swagger 页面:http://192.168.56.107:8080/foodie-dev-api/doc.html