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方案

配置步骤:

  1. 下载WinSW
  2. 创建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>
    
  3. 重命名winsw.exeMyApp.exe
  4. 安装服务:
    $ MyApp.exe install
    

服务管理命令:

$ MyApp.exe start    # 启动
$ MyApp.exe stop     # 停止
$ MyApp.exe uninstall # 卸载

4.2. Java Service Wrapper方案

⚠️ 注意GPL许可证限制

配置流程参考详细教程,核心步骤:

  1. 创建配置文件指定JAR路径
  2. 配置JVM参数和服务属性
  3. 通过工具安装Windows服务

5. 扩展参考

6. 总结

Spring Boot应用服务化部署已变得非常简单,关键点:

  1. ✅ 使用spring-boot-maven-plugin<executable>true</executable>配置
  2. ✅ 遵循最小权限原则创建专用运行用户
  3. ✅ 根据系统特性选择合适的服务管理方案:
    • Linux:Systemd(推荐) / System V Init / Upstart
    • Windows:WinSW(推荐) / Java Service Wrapper

服务化部署能显著提升应用的可管理性和可靠性,是生产环境的标准实践。


原始标题:Spring Boot Application as a Service