當(dāng)我們使用Spring Boot完成應(yīng)用開發(fā)時送滞,我們可以在命令行使用java -jar <appname>.jar
來啟動我們的應(yīng)用是晨。但是竟稳,當(dāng)我們關(guān)閉命令行后我們的程序也跟著關(guān)閉了躺坟。這不是我們想要的結(jié)果沦补,下面就給大家介紹下Spring Boot官方文檔里面的啟動方法。
生成可以執(zhí)行的jar
在Maven中使用下面的插件可以生成可執(zhí)行的jar文件:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
如果你使用的Gradle瞳氓,可以使用下面的配置:
springBoot {
executable = true
}
現(xiàn)在你可以通過./my-application.jar
(my-application.jar
是你的artifact名稱)來運行你的應(yīng)用策彤。
完全可執(zhí)行的jar是通過嵌入額外的腳本來工作的。當(dāng)前所有的工具并不都支持這種格式匣摘,所以你并不能總是只用這種技術(shù)店诗。
默認(rèn)的腳本支持大多數(shù)的linux發(fā)行版,而且在CentOS和Ubuntu上測試通過音榜。其他平臺庞瘸,例如OS X和FreeBSD,將會要求使用自定義的
embeddedLaunchScript
赠叼。
當(dāng)jar包執(zhí)行后擦囊,將使用jar包所在的目錄作為工作目錄。
使用Unix/Linux服務(wù)來運行spring boot應(yīng)用
作為init.d(System V)服務(wù)來運行
如果你配置Spring Boot的Maven或Gradle插件來生成完全可執(zhí)行的jar包嘴办,而且你不想使用自定義的embeddedLaunchScript
瞬场,那么你的應(yīng)用可以作為init.d
服務(wù)來運行。通過簡單的符號連接(symlink)將可執(zhí)行的jar包連接到init.d
來支持標(biāo)準(zhǔn)的start
,stop
,restart
和status
命令涧郊。
這些腳本有如下特點:
使用jar包的所有者來運行服務(wù)贯被。
使用/var/run/<appname>/<appname>.pid
來跟蹤應(yīng)用的PID。
將控制臺日志重定向到/var/log/<appname>.log
。
如果你已經(jīng)有一個Spring Boot應(yīng)用在/var/myapp
下面彤灶,可以使用下面的命令創(chuàng)建一個符號連接將Spring Boot應(yīng)用創(chuàng)建為init.d
服務(wù):
$ sudo ln -s /var/myapp/myapp.jar /etc/init.d/myapp
一旦執(zhí)行成功看幼,你就可以使用一般的方法啟動或停止這個服務(wù)。例如:
$ service myapp start
如果你的應(yīng)用啟動失敗幌陕,通過
/var/log/<appname>.log
日志文件來檢查錯誤诵姜。
你也可以使用操作系統(tǒng)工具來讓你的應(yīng)用自動啟動,例如搏熄,在Debian上:
$ update-rc.d myapp defaults <priority>
作為systemd服務(wù)來運行
Systemd是啟動系統(tǒng)System V的繼承者棚唆,現(xiàn)在正在被許多現(xiàn)代Linux發(fā)行版使用。雖然你可以在Systemd中繼續(xù)使用init.d
腳本搬卒,也很可能是使用Systemd
服務(wù)來啟動Spring Boot應(yīng)用瑟俭。
如果你已經(jīng)有一個Spring Boot應(yīng)用在/var/myapp
下面,在/etc/systemd/system
目錄下創(chuàng)建一個名為myapp.service
的文件契邀,將下面代碼錄入其中并保存摆寄,這樣就將你的Spring Boot應(yīng)用創(chuàng)建為了一個systemd
服務(wù):
[Unit]
Description=myapp
After=syslog.target
[Service]
User=myapp
ExecStart=/var/myapp/myapp.jar
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
記得將Description、User和ExecStart改成你應(yīng)用對應(yīng)的信息坯门。
注意放可,ExecStart并不是聲明一個腳本命令捎谨,只是指定了默認(rèn)運行的命令。
注意,用戶運行這個程序并不像運行init.d
服務(wù)论泛,PID文件和控制臺日志文件由systemd
自己管理铡原,因此必須在服務(wù)腳本中做適當(dāng)?shù)呐渲谩?/p>
使用如下腳本來啟動剛才配置的systemd:
systemctl start myapp.service
使用如下腳本來是剛才的服務(wù)自動啟動:
systemctl enable myapp.service
作為Windows服務(wù)運行
使用windows可以將Spring Boot應(yīng)用作為windows服務(wù)啟動凛澎。