Linux系統下部署SpringBoot應用
一、概述
在這之前,需要在機子上準備好java的運行環境。
二、項目部署
2.1、項目打包成jar文件
項目部署前需要將項目打包成jar文件,這部分的話具體不再闡述。如果你是標準的SpringBoot項目可以參見下圖。
2.2、在Linux服務器上創建項目文件夾
使用如下的命令創建文件夾
mkdir supervision
創建後的文件夾的目錄結構如下圖所示
2.3、創建restart.sh文件
## 創建文件
vim restart.sh
文件內容
#!/bin/bash
base_home='/home/supervision'
app_name='supervision'
pid=`ps -ef|grep ${app_name}|grep -v grep|grep -v restart|awk '{print$2}'`
if [ -n "${pid}" ] ;then
kill -9 ${pid}
sleep 10
fi
gclog_file=$base_home/log/gc.log
dump_dir=$base_home/heapdump
errorlogs_dir=$base_home/log
java -Xmx1g -Xms1g -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:GCLogFileSize=128M -XX:NumberOfGCLogFiles=1 -Xloggc:${gclog_file} -XX:HeapDumpPath=${dump_dir} -jar $base_home/app/${app_name}.jar --Dspring.config.location=$base_home/config/application.yml >> $base_home/log/${app_name}_$(date +'%Y%m%d').log &
2.3、給restart.sh文件添加權限
chmod +x restart.sh
2.4、使用
sh restart.sh
三、restart.sh文件中的命令行說明
base_home='/home/supervision' : supervision項目的根路徑
app_name='supervision' : 項目名稱(即/home/supervision/app/supervision.jar的文件名)
pid=`ps -ef|grep ${app_name}|grep -v grep|grep -v restart|awk '{print$2}'` : 找到supervision項目當前運行的進程號(若有)
if [ -n "${pid}" ] ;then kill -9 ${pid} sleep 10 fi : 若supervision項目已運行,根據上一步驟獲得的pid可以殺死當前運行supervision項目的進程
-Xmx1g : 設置JVM最大可用內存爲1g。
-Xms1g : 設置JVM促使內存爲1g。此值可以設置與-Xmx相同,以避免每次垃圾回收完成後JVM重新分配內存。
-XX:+UseParallelGC : 選擇垃圾收集器爲並行收集器。
-XX:+UseParallelOldGC : 配置年老代垃圾收集方式爲並行收集。
-XX:+PrintGCDetails : 可以詳細瞭解GC中的變化。
-XX:+PrintGCTimeStamps : 配合上面的PrintGCDetails,可以瞭解這些垃圾收集發生的時間,自JVM啓動以後以秒計量。
-XX:+UseGCLogFileRotation : 啓用GC日誌文件的自動轉儲。
-XX:GCLogFileSize=128M : 控制GC日誌文件的大小。
-XX:NumberOfGCLogFiles=1 : GC日誌文件的循環數目。
-Xloggc:${gclog_file} : 把gc日誌信息記錄到文件gclog_file=$base_home/log/gc.log。
-XX:HeapDumpPath=${dump_dir} : 將Heap Dump信息保存到dump_dir=$base_home/heapdump。
--spring.config.location=$base_home/config/application.yml : 運行的配置文件,若沒有config/application.yml,則用jar裏的配置文件。
>> $base_home/log/${app_name}_$(date +'%Y%m%d').log 將運行的log信息保存到$base_home/log 文件夾下,log文件會以日期命名${app_name}_$(date +'%Y%m%d').log 最終的名字可能是supervision_20190213.log 。
&:符號是爲了讓程序能在後臺運行。
四、踩到的坑
restart.sh文件中,配置了jar運行時的配置文件的讀取位置。如下圖部分
但是實際運行的時候出現了,無法讀取到配置文件的情況。如下圖
這個時候可以將設置讀取外部配置的代碼去掉。
PS:我實際在用的時候發現,後來不知道怎麼就可以了。