1. 概述
本文探讨将Spring Boot应用作为服务运行的各种方案。
首先介绍Web应用的打包方式和系统服务概念,随后分别讲解在Linux和Windows系统下配置服务的不同方法。最后提供相关参考资料。
2. 项目设置与构建说明
2.1. 打包方式
传统Web应用通常打包为WAR文件部署到Web服务器。Spring Boot应用则支持两种打包方式:
- ✅ JAR包:内置Web服务器,无需额外安装应用服务器
- ✅ WAR包:传统部署方式,需外部Web服务器支持
2.2. Maven配置
pom.xml核心配置示例:
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
</parent>
<dependencies>
<!-- 依赖项 -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
</plugins>
</build>
关键配置说明:
<packaging>jar</packaging>
:指定JAR打包<executable>true</executable>
:生成可执行MANIFEST.MF文件- Spring Boot 1.3+版本均支持此功能
2.3. 构建应用
执行构建命令:
$ mvn clean package
生成的可执行JAR位于target目录,可通过以下方式启动:
$ java -jar your-app.jar
⚠️ 此时仍需手动执行Java命令,后续将介绍如何将其改造为系统服务。
3. Linux系统部署
3.1. 安全准备
创建专用运行用户并设置权限:
$ sudo useradd baeldung
$ sudo passwd baeldung
$ sudo chown baeldung:baeldung your-app.jar
$ sudo chmod 500 your-app.jar
3.2. System V Init方案
创建服务链接:
$ sudo ln -s /path/to/your-app.jar /etc/init.d/your-app
服务管理命令:
$ sudo service your-app start # 启动服务
$ sudo service your-app stop # 停止服务
$ sudo service your-app restart # 重启服务
$ sudo service your-app status # 查看状态
服务特性:
- ✅ 以
baeldung
用户身份运行 - ✅ PID文件保存在
/var/run/your-app/your-app.pid
- ✅ 日志输出到
/var/log/your-app.log
3.3. Systemd方案
创建服务配置文件/etc/systemd/system/your-app.service
:
[Unit]
Description=Spring Boot应用服务
After=syslog.target
[Service]
User=baeldung
ExecStart=/path/to/your-app.jar
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
服务管理命令:
$ sudo systemctl start your-app # 启动
$ sudo systemctl stop your-app # 停止
$ sudo systemctl enable your-app # 开机自启
⚠️ 需显式配置PID文件和日志路径(参考官方文档)
3.4. Upstart方案
创建作业配置/home/{user}/.config/upstart/your-app.conf
:
description "Spring Boot应用服务"
respawn # 异常终止时自动重启
exec java -jar /path/to/your-app.jar
启动服务:
$ start your-app
4. Windows系统部署
4.1. Windows Service Wrapper方案
配置步骤:
- 下载WinSW
- 创建
MyApp.xml
配置文件:<service> <id>MyApp</id> <name>MyApp</name> <description>Spring Boot服务化运行</description> <env name="MYAPP_HOME" value="%BASE%"/> <executable>java</executable> <arguments>-Xmx256m -jar "%BASE%\MyApp.jar"</arguments> <logmode>rotate</logmode> </service>
- 重命名
winsw.exe
为MyApp.exe
- 安装服务:
$ MyApp.exe install
服务管理命令:
$ MyApp.exe start # 启动
$ MyApp.exe stop # 停止
$ MyApp.exe uninstall # 卸载
4.2. Java Service Wrapper方案
⚠️ 注意GPL许可证限制
配置流程参考详细教程,核心步骤:
- 创建配置文件指定JAR路径
- 配置JVM参数和服务属性
- 通过工具安装Windows服务
5. 扩展参考
- ✅ Procrun方案:使用Apache Commons Daemon的Procrun工具
- ✅ RedHat系统:Systemd单元文件配置指南
- ✅ JAR自执行:集成Bash脚本方案
6. 总结
Spring Boot应用服务化部署已变得非常简单,关键点:
- ✅ 使用
spring-boot-maven-plugin
的<executable>true</executable>
配置 - ✅ 遵循最小权限原则创建专用运行用户
- ✅ 根据系统特性选择合适的服务管理方案:
- Linux:Systemd(推荐) / System V Init / Upstart
- Windows:WinSW(推荐) / Java Service Wrapper
服务化部署能显著提升应用的可管理性和可靠性,是生产环境的标准实践。