知識庫 / Spring / Spring Boot RSS 訂閱

Spring Boot 應用即服務

Spring Boot
HongKong
4
02:45 PM · Dec 06 ,2025

1. 概述

本文將探討如何以服務的方式運行 Spring Boot 應用程序的一些選項。

首先,我們將解釋 Web 應用程序的打包選項和系統服務。 在隨後的部分,我們將探索在 Linux 和 Windows 兩種系統上設置服務時,我們所擁有的各種替代方案。

最後,我們將提供一些額外信息來源的參考。

2. 項目設置與構建説明

This section provides instructions on how to set up your project and build the application.

Prerequisites

Before you begin, ensure you have the following installed:

  • Java Development Kit (JDK) 8 or higher
  • Maven 3.3 or higher
  • A code editor or IDE (e.g., IntelliJ IDEA, Eclipse, VS Code)

Setting up the Project

  1. Clone the project repository from GitHub.
  2. Navigate to the project directory in your terminal.
  3. Import the project into your IDE.

Building the Project

  1. Open a terminal and navigate to the project directory.

  2. Run the following Maven command to build the project:

    mvn clean install
    

    This command will compile the source code, run the unit tests, and package the application.

Understanding the Build Output

The build process will generate several artifacts, including:

  • target/my-app-1.0.jar: The compiled application JAR file.
  • target/my-app-1.0-sources.jar: The source code JAR file.
  • target/my-app-1.0-test.jar: The test code JAR file.

You can deploy these artifacts to your desired environment.

2.1. 打包

Web 應用程序傳統上以 Web 應用程序歸檔 (WAR) 格式打包,並部署到 Web 服務器。

Spring Boot 應用程序可以打包為 WAR 文件和 JAR 文件。 後者將 Web 服務器嵌入到 JAR 文件中,從而允許您在無需安裝和配置應用程序服務器的情況下運行應用程序。

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>

打包必須設置為 jar 格式。我們撰寫時正使用 Spring Boot 的最新穩定版本,但任何 1.3 版本及更高版本均可使用。有關可用版本的更多信息,請參閲 這裏

請注意,我們已將 <executable> 參數設置為 true 用於 spring-boot-maven-plugin 插件。這確保了 MANIFEST.MF 文件被添加到 JAR 包中。此 manifest 包含一個 Main-Class 條目,它指定了您應用程序的主類。

2.3. 構建您的應用程序

在應用程序的根目錄下運行以下命令:

$ mvn clean package

可執行 JAR 文件現在位於 target 目錄下,可以通過在命令行中執行以下命令啓動應用程序:

$ java -jar your-app.jar

此時,您仍然需要使用 -jar 選項來調用 Java 解釋器。 能夠將應用程序作為服務啓動,遠比直接調用解釋器更可取,原因有很多。

3. 在 Linux

為了以後台進程的方式運行程序,我們可以簡單地使用 nohup Unix 命令,但這也不是首選方法,原因有很多。更詳細的解釋可以在這個 線程 中找到。

相反,我們將 daemonize 我們的進程。在 Linux 下,我們可以選擇使用傳統的 System V init 腳本或 Systemd 配置文件的方式來配置守護進程。前者傳統上最為人所知,但正在逐漸被後者所取代。

您可以在這裏找到關於兩者之間差異的更多信息 這裏

為了增強安全性,我們首先創建一個特定用户來運行服務,並相應地更改可執行的 JAR 文件權限:

$ sudo useradd baeldung
$ sudo passwd baeldung
$ sudo chown baeldung:baeldung your-app.jar
$ sudo chmod 500 your-app.jar

3.1. System V Init

一個 Spring Boot 可執行 JAR 文件使得服務設置過程非常簡單:

$ sudo ln -s /path/to/your-app.jar /etc/init.d/your-app

上述命令會創建一個指向您可執行的 JAR 文件的符號鏈接。您必須使用您可執行 JAR 文件的完整路徑,否則符號鏈接將無法正常工作。此鏈接允許您以服務的方式啓動應用程序:

$ sudo service your-app start

腳本支持標準服務命令 。 此外:

  • 它啓動了在用户 創建的運行服務
  • 它在 中跟蹤應用程序的進程 ID
  • 它將控制枱日誌寫入 ,您可能需要檢查,以防您的應用程序無法正確啓動

3.2. systemd

systemd 服務配置非常簡單。首先,我們使用以下示例創建一個名為 your-app.service 的腳本,並將其放置在 /etc/systemd/system 目錄下:

[Unit]
Description=A Spring Boot application
After=syslog.target

[Service]
User=baeldung
ExecStart=/path/to/your-app.jar SuccessExitStatus=143 

[Install] 
WantedBy=multi-user.target

請務必修改 DescriptionUserExecStart 字段以匹配您的應用程序。您應該能夠在此時執行上述標準服務命令。

與上一節中描述的 System V init 方法不同,進程 ID 文件和控制枱日誌文件應使用服務腳本中的相應字段進行明確配置。詳盡的選項列表可以在 這裏找到 這裏

3.3. Upstart

Upstart 是一種基於事件的服務管理器,是 System V init 的潛在替代方案,它提供了對不同守護進程行為的更多控制。

該站點提供了良好的 設置説明,應該適用於幾乎任何 Linux 發行版。在使用 Ubuntu 時,你可能已經安裝並配置了它(請檢查是否有以“upstart”開頭的任務在 /etc/init 中存在)。

我們創建一個任務 your-app.conf 以啓動我們的 Spring Boot 應用程序:

# Place in /home/{user}/.config/upstart

description "Some Spring Boot application"

respawn # attempt service restart if stops abruptly

exec java -jar /path/to/your-app.jar

現在運行“start your-app”,您的服務將會啓動。

Upstart 提供了許多工作配置選項,您可以在 這裏 找到大部分。

4. 在 Windows 平台

本節介紹了幾種可用於將 Java JAR 文件作為 Windows 服務運行的選項。

4.1. Windows Service Wrapper

由於 Java Service Wrapper 的 GPL 許可協議(見下一節)與 Jenkins 的 MIT 許可協議等相沖突,因此 Java Service Wrapper 項目,也被稱為 winsw,也因此得以誕生。

Winsw 提供程序化方式來安裝/卸載/啓動/停止服務。此外,它還可以用於在 Windows 下運行任何類型的可執行文件作為服務,而 Java Service Wrapper,正如其名稱所暗示的,僅支持 Java 應用程序。

首先,請從 這裏 下載二進制文件。接下來,定義我們 Windows 服務的配置文件 MyApp.xml 應如下所示:

<service>
    <id>MyApp</id>
    <name>MyApp</name>
    <description>This runs Spring Boot as a Service.</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.xml 配置文件的名稱匹配。之後,您可以像這樣安裝服務:

$ MyApp.exe install

同樣,您可以使用 卸載啓動停止 等命令。

4.2. Java Service Wrapper

如果您不介意 Java Service Wrapper 項目的 GPL 許可,這個替代方案可能同樣能滿足您將 JAR 文件配置為 Windows 服務的需求。基本上,Java Service Wrapper 也需要您在配置文件中指定如何以服務模式在 Windows 下運行您的進程。

Java Service Wrapper 項目的 GPL 許可。

這篇文章 以非常詳細的方式解釋瞭如何在 Windows 下以服務模式執行 JAR 文件,因此我們無需重複信息。

5. Additional References

可以使用 Procrun 項目中的 Apache Commons Daemon 來以 Windows 服務的方式啓動 Spring Boot 應用程序。Procrun 是一組應用程序,允許 Windows 用户將 Java 應用程序包裝為 Windows 服務。此類服務可以設置為在計算機啓動時自動啓動,並且在沒有用户登錄的情況下將繼續運行。

有關在 Unix 系統中啓動 Spring Boot 應用程序的更多信息,請參閲 這裏。 此外,還有關於如何修改 Redhat 基於 Systemd 的單元文件 的詳細説明。 另外

另外,這個快速指南 描述瞭如何將 Bash 腳本包含到 JAR 文件中,使其成為一個可執行文件!

6. 結論

服務使您能夠高效地管理應用程序狀態,正如我們所見,對於 Spring Boot 應用程序的服務設置現在比以往任何時候都容易。

請記住遵循重要的用户權限安全措施,以運行您的服務。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.