# SpringBoot 项目打成 war 并发布到云服务器
# 打包方式
- jar:服务化概念,后续学完 spring cloud 后,所有的服务打包都是以 jar 包形式
- war:应用程序的概念,也可以向外提供服务和接口
# 打成 war 包配置
spring boot 默认是 jar 包方式,修改成 war 包方式如下:
修改 api 打成 war 包
<!-- <packaging>jar</packaging>--> <!-- 打包 war 1:由 jar 包改成 war 包 --> <packaging>war</packaging>
1
2
3spring 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这个配置方式官网文档也有的。
由于移除了 tomcat 依赖,那么一些依赖包,如 servlet 等就没有了,需要自定义引入
<!-- 打包 war 3:添加依赖 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> </dependency>
1
2
3
4
5
6增加 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
18application.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