基于 :IDEA

设置 war 打包

单体项目打包成 war 包
在 最上层 子模块中的 pom 文件设置,父级的 packaging 还是 pom

  1. <packaging>war</packaging>

移除内嵌 Tomcat

右键 pom 文件,选择 maven->show dependences
image.png
cmd+f 查找
image.png
点击就能找到 spring-boot-starter-tomcat, 右键 Exclude
image.png
就会自动添加移除选项,直接复制也可以。。

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

添加 Servlet 支持

由于移除了 tomcat 包,包含的 Servlet 支持就没了
在 pom 中添加 Servlet 支持

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <scope>provided</scope>
</dependency>

创建 war 包启动类

由于使用外置 Tomcat, 就不能直接通过 Application 启动了,
需要依托于另外一个 war 包的启动类
在 Application 同级文件夹下创建 WarStarterApplication

public class WarStarterApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        // 指向 Application 这个 SpringBoot 启动类
        return builder.sources(Application.class);
    }
}

install 输出 war 包

打开 右边栏 Maven 点击 clean,成功后 install
image.png
右键 子模块 Reveal in Finder
image.png
api子模块 的 target 下就有刚生成的 war 包
image.png
把后面的版本号去掉,只留项目名称

上传到 服务器上的 webapp 下就可以了!

Nginx 配置去除项目名

proxy_pass 后面设置项目名就可以

upstream java.ilovestudy.club {
        server localhost:8080 max_conns=2;
}

server {
    server_name java.ilovestudy.club;
    listen 80;
    location / {
        proxy_pass http://java.ilovestudy.club/world-api/;
        proxy_pass_header Server;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_set_header X-Forwarded-For $remote_addr;

    }
}