首頁>技術>

將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.logSystemd

使用Systemd,我們需要在 /etc/systemd/system 建立一個your-app.service檔案:

[Unit]Description=A Spring Boot applicationAfter=syslog.target [Service]User=flydeanExecStart=/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下面使用。有興趣的同學可以自行去學習。

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Python—使用PySide2(Qt for Python)編寫跨平臺GUI程式