Spring Boot 项目部署与开机自启详解
Spring Boot 项目有两种部署方式:
-
推荐:直接运行 JAR 包(无需安装外部 Tomcat,Spring Boot 内嵌容器,配置更简单);
-
WAR 包部署(需禁用内嵌 Tomcat,适配外部 Tomcat)。
下面优先讲更简单的 JAR 包部署+开机自启,再补充 WAR 包适配要点。
方式1:Spring Boot JAR 包部署(推荐)
前提
-
本地已将 Spring Boot 项目打包为
xxx.jar(可通过mvn clean package或 IDE 打包); -
服务器已安装 Java 17(你已完成)。
步骤1:上传 JAR 包到服务器
# 创建应用目录(规范管理)
sudo mkdir -p /opt/springboot-app# 上传 JAR 包(替换为你的 JAR 包名和服务器IP)
scp your-app.jar admin@你的服务器IP:/opt/springboot-app/# 给 JAR 包执行权限
sudo chmod +x /opt/springboot-app/your-app.jar
步骤2:创建 systemd 服务文件(开机自启核心)
sudo nano /etc/systemd/system/springboot-app.service
粘贴以下配置(根据你的实际情况修改):
[Unit]
Description=Spring Boot Application
After=network.target # 网络启动后再启动应用[Service]
# 运行用户(避免 root 运行,提升安全性)
User=admin
Group=admin# 应用目录
WorkingDirectory=/opt/springboot-app# Java 启动命令(指定 JAR 包,配置 JVM 参数)
ExecStart=/usr/bin/java -jar /opt/springboot-app/your-app.jar \-Xms512M -Xmx1024M # JVM 内存配置,根据服务器配置调整# 重启策略(异常退出时自动重启)
Restart=on-failure
RestartSec=5 # 重启间隔 5 秒# 日志输出(可选,也可依赖 Spring Boot 自身日志)
StandardOutput=append:/opt/springboot-app/app.log
StandardError=append:/opt/springboot-app/app-error.log[Install]
WantedBy=multi-user.target # 多用户模式下开机自启
保存退出(Ctrl+O → 回车 → Ctrl+X)。
步骤3:配置并启动服务
# 重新加载 systemd 配置
sudo systemctl daemon-reload# 启动应用服务
sudo systemctl start springboot-app# 设置开机自启
sudo systemctl enable springboot-app# 查看服务状态(确认是否启动成功)
sudo systemctl status springboot-app
如果状态显示 active (running),说明启动成功。
步骤4:验证应用访问
访问 http://你的服务器IP:应用端口/接口路径(端口是你 Spring Boot 配置的 server.port,默认 8080),能正常访问接口即部署成功。
方式2:Spring Boot WAR 包部署(适配外部 Tomcat)
如果必须用 WAR 包部署到外部 Tomcat,需要先修改 Spring Boot 项目代码,再按之前的 Tomcat 部署步骤操作:
步骤1:本地项目修改(关键适配)
-
修改 pom.xml:
<!-- 1. 打包方式改为 war --> <packaging>war</packaging><!-- 2. 禁用内嵌 Tomcat(提供为编译时依赖) --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope> </dependency><!-- 3. 引入 Spring Boot WAR 支持(如果是 Spring Boot 2.x+/3.x) --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> -
修改启动类:
-
让启动类继承
SpringBootServletInitializer并重写configure方法:import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;@SpringBootApplication public class YourAppApplication extends SpringBootServletInitializer {@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder application) {return application.sources(YourAppApplication.class);}public static void main(String[] args) {SpringApplication.run(YourAppApplication.class, args);} } -
打包 WAR 包:
-
执行
mvn clean package,生成的 WAR 包在target目录下。
步骤2:服务器部署
按之前给你的 Tomcat 部署步骤操作:
-
将 WAR 包上传到 Tomcat 的
webapps目录; -
配置 Tomcat 的 systemd 服务并设置开机自启;
-
访问路径:
http://服务器IP:Tomcat端口/WAR包名/接口路径。
常用运维命令
# 重启 Spring Boot 应用
sudo systemctl restart springboot-app# 停止应用
sudo systemctl stop springboot-app# 查看应用日志(Spring Boot 自身日志,默认在应用目录下)
tail -f /opt/springboot-app/logs/xxx.log # 或你配置的日志路径# 查看系统服务日志
journalctl -u springboot-app -f
总结
-
推荐方案:Spring Boot 优先用 JAR 包部署,无需外部 Tomcat,通过
systemd配置服务即可实现开机自启,步骤更简单; -
WAR 包适配:需修改项目
pom.xml(禁用内嵌 Tomcat)和启动类(继承SpringBootServletInitializer),再部署到外部 Tomcat; -
自启核心:通过
systemd服务文件配置ExecStart启动命令、Restart重启策略,执行enable开启开机自启。