將Spring Boot應用程序注冊成為系統服務



將Spring Boot應用程序注冊成為系統服務

在之前的文章中,我們提到了很多Spring Boot的技巧,那么當我們創建好了Spring Boot應用程序之后,怎么在生成環境中運行呢?如果只是以原始的java -jar 的方式來運行的話,不能保證程序的健壯性和穩定性,最好的辦法是將程序注冊成為服務來使用。

本文將會講解如何將Spring Boot應用程序注冊成為Linux和windows的服務。

前期准備

首先我們需要將應用程序打包成為一個可執行的jar包,我們需要添加如下依賴:

<packaging>jar</packaging>
 
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
</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。添加spring-boot-maven-plugin是為了將app打包成為可執行的jar包。

打包成可執行jar包

寫好了應用程序,我們可以執行:

mvn clean package

來打包應用程序,這里我們打包之后的jar包名字為:springboot-run-as-service-0.0.1-SNAPSHOT.jar。

注冊成為liunx服務

在linux中,我們可以選擇System V init script或者Systemd 配置文件,前者逐漸在被后者替代。

為了安全起見,我們需要創建一個運行用戶,並給jar包賦予相應的權限:

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

System V Init

創建一個文件鏈接到init.d目錄,如下:

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

接下來我們就可以啟動應用程序了:

sudo service your-app start

service命令支持start, stop, restart 和 status。同時它還提供了如下的功能:

  • your-app 將會以flydean用戶啟動
  • 程序運行的pid存儲在/var/run/your-app/your-app.pid
  • 應用程序的日志在/var/log/your-app.log

Systemd

使用Systemd,我們需要在 /etc/systemd/system 創建一個your-app.service文件:

[Unit]
Description=A Spring Boot application
After=syslog.target
 
[Service]
User=flydean
ExecStart=/path/to/your-app.jar SuccessExitStatus=100 
 
[Install] 
WantedBy=multi-user.target

接下來我們可以使用systemctl start|stop|restart|status your-app來管理你的服務了。

Upstart

Upstart是一個事件驅動的服務管理器,如果你使用Ubuntu,將會被默認安裝。

我們來創建一個your-app.conf :

# 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

在Windows中安裝

在windows中,我們也有很多方式,如下:

Windows Service Wrapper

Windows Service Wrapper 又叫 winsw是一個開源軟件,winsw需要和一個配置文件your-app.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%\your-app.jar"</arguments>
    <logmode>rotate</logmode>
</service>

注意,你需要修改winsw.exe成為your-app.exe來和your-app.xml配合使用。

Java Service Wrapper

Java Service Wrapper 提供了非常強大的配置,他可以讓你的應用程序在windows和Linux下面使用。有興趣的同學可以自行去學習。

更多教程請參考 flydean的博客


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM