文章目录
前言
将SpringBoot项目打包,然后部署到服务器的tomcat容器中运行,踩坑笔记。
一、准备
- Linux 服务器。
- 要打包的 SpringBoot 项目
- tomcat8
二、修改 SpringBoot 项目配置
1、修改打包方式
pom.xml 中打包方式修改为 war 。
<packaging>war</packaging>
2、修改项目依赖
将 SpringBoot 自带 tomcat 排除(设置为只在编译和测试阶段有效)。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
3、修改最终打出的 war 包的名称
在 pom.xml 的 <build> 标签中添加( docker 是最终打出的 war 包的文件名,可自己取名):
<finalName>docker</finalName>
4、修改 application.yml(非必须)
设置端口号和 context-path:
-
端口号设置为和 要部署的 tomcat 一致。
-
context-path 设置为和 war 包文件名一致。
这两个步骤都不是必须的,这两个值在部署到 tomcat 之后也是不起效果的,设置这两个值只是为了在本地测试时和在 tomcat 运行时端口号和 url 保持一致。
server:
port: 8080
servlet:
context-path: /docker
三、修改 SpringBoot 项目启动类
启动类继承 org.springframework.boot.web.servlet.support.SpringBootServletInitializer 并重写其 configure 方法。
@SpringBootApplication
public class DockerImageTestApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(DockerImageTestApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(DockerImageTestApplication.class, args);
}
}
四、打包并部署项目
使用 maven 打包项目。
运行 package -f pom.xml 或直接执行 idea 中 maven 的打包命令。
将打好 war 包放到 tomcat 的 webapps 目录下(不用解压,tomcat 运行时会自动解压)。
执行 tomcat/bin/startup.sh 启动 tomcat 。
五、访问项目
使用浏览器访问项目中的接口吧(不要忘记防火墙开放 8080 端口哦)
http://192.168.40.140:8080/docker/hello
最后:踩坑记录
1、刚开始以为只需要将打包方式改为 war 就可以了,结果打脸了。。。
2、引入 spring-boot-starter-tomcat 依赖时一定设置 scope 为 provided (相当于 tomcat 依赖只在本地运行和测试的时候有效,打包的时候会排除这个依赖)。
3、不要忘记修改启动类(在启动类同样的包里新建一个类继承 SpringBootServletInitializer 也是可以的)。
4、war 包的名称决定了你访问项目 url 的前缀,这个不要忘记(如果不想要前缀,可以将 war 包命名为 ROOT)。
5、本地打包的 jdk 版本一定要和服务器的 jdk 版本保持一致,jdk 版本不一致,tomcat 启动时会忽略这个项目,而且不会报错,导致访问项目 404 。(我就遇到了这个问题,蒙圈了好久。。。。。。)