偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

SpringBoot 部署腳本進(jìn)階實踐

開發(fā) 前端
在SpringBoot項目的生命周期中,Jar包部署是生產(chǎn)環(huán)境交付的核心環(huán)節(jié)。相比傳統(tǒng)WAR包部署,Jar包自帶嵌入式容器的特性讓部署流程更簡潔,但也對啟動腳本的專業(yè)性提出了更高要求。

前言

SpringBoot項目的生命周期中,Jar包部署是生產(chǎn)環(huán)境交付的核心環(huán)節(jié)。相比傳統(tǒng)WAR包部署,Jar包自帶嵌入式容器的特性讓部署流程更簡潔,但也對啟動腳本的專業(yè)性提出了更高要求。一個健壯的啟動腳本不僅能實現(xiàn)服務(wù)的啟停管理,還能處理日志輪轉(zhuǎn)、內(nèi)存配置、異常監(jiān)控等關(guān)鍵場景,直接影響應(yīng)用的穩(wěn)定性與可維護性。

核心要素

SpringBoot Jar包的啟動本質(zhì)上是通過java -jar命令執(zhí)行主程序,但生產(chǎn)環(huán)境的腳本需要覆蓋更全面的場景。一個專業(yè)的啟動腳本應(yīng)包含以下核心功能:

  • 進(jìn)程管理:實現(xiàn)服務(wù)的啟動、停止、重啟、狀態(tài)查詢等基礎(chǔ)操作,避免手動kill進(jìn)程的風(fēng)險。
  • 參數(shù)配置:合理設(shè)置JVM內(nèi)存參數(shù)、系統(tǒng)屬性、程序參數(shù),優(yōu)化應(yīng)用性能。
  • 日志處理:規(guī)范日志輸出路徑,實現(xiàn)日志輪轉(zhuǎn),防止磁盤空間耗盡。
  • 環(huán)境隔離:支持多環(huán)境配置切換,區(qū)分開發(fā)、測試、生產(chǎn)環(huán)境的參數(shù)差異。
  • 異常防護:添加啟動前檢查、啟動超時控制、進(jìn)程崩潰自動重啟等機制。

這些要素共同構(gòu)成了腳本的健壯性基礎(chǔ),也是從能啟動啟動好的關(guān)鍵轉(zhuǎn)變。

腳本實現(xiàn)

基礎(chǔ)啟動

從最簡化的腳本開始,逐步構(gòu)建功能完備的部署工具。

#!/bin/bash
# 應(yīng)用名稱
APP_NAME="demo-service"
# Jar包路徑
JAR_FILE="./demo-service-1.0.0.jar"
# 日志輸出路徑
LOG_PATH="./logs"
# JVM參數(shù)配置
JVM_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC -Dspring.profiles.active=prod"

# 創(chuàng)建日志目錄
if [ ! -d "$LOG_PATH" ]; then
  mkdir -p "$LOG_PATH"
fi

# 啟動函數(shù)
start() {
# 檢查進(jìn)程是否已啟動
if pgrep -f "$JAR_FILE" > /dev/null; then
    echo"$APP_NAME is already running."
    return 1
fi

echo"Starting $APP_NAME..."
# 后臺啟動并輸出日志
  nohup java $JVM_OPTS -jar $JAR_FILE --spring.config.location=./ &>/dev/null &

# 等待啟動完成
  sleep 3
if pgrep -f "$JAR_FILE" > /dev/null; then
    echo"$APP_NAME started successfully."
else
    echo"Failed to start $APP_NAME. Check logs for details."
fi
}

# 停止函數(shù)
stop() {
if ! pgrep -f "$JAR_FILE" > /dev/null; then
    echo"$APP_NAME is not running."
    return 1
fi

echo"Stopping $APP_NAME..."
# 優(yōu)雅停止進(jìn)程
  pkill -f "$JAR_FILE"

# 等待進(jìn)程終止
  sleep 3
if pgrep -f "$JAR_FILE" > /dev/null; then
    echo"Force stopping $APP_NAME..."
    pkill -9 -f "$JAR_FILE"
fi

echo"$APP_NAME stopped."
}

# 重啟函數(shù)
restart() {
  stop
  start
}

# 狀態(tài)查詢函數(shù)
status() {
if pgrep -f "$JAR_FILE" > /dev/null; then
    echo"$APP_NAME is running."
else
    echo"$APP_NAME is not running."
fi
}

# 命令分發(fā)
case"$1"in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    restart
    ;;
  status)
    status
    ;;
  *)
    echo"Usage: $0 {start|stop|restart|status}"
    exit 1
    ;;
esac

腳本實現(xiàn)了最核心的進(jìn)程管理功能,通過nohup實現(xiàn)后臺運行,使用pgreppkill進(jìn)行進(jìn)程檢測與控制,同時配置了基礎(chǔ)的JVM參數(shù)和日志輸出。使用時只需修改APP_NAME、JAR_FILE等變量,即可適配不同項目。

進(jìn)階腳本

啟動參數(shù)優(yōu)化

根據(jù)應(yīng)用特性調(diào)整JVM參數(shù),增加監(jiān)控與診斷配置:

# 增強版JVM參數(shù)
JVM_OPTS="\
  -Xms1024m -Xmx2048m \
  -XX:+UseG1GC \
  -XX:MaxGCPauseMillis=200 \
  -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m \
  -XX:+HeapDumpOnOutOfMemoryError \
  -XX:HeapDumpPath=$LOG_PATH/heapdump.hprof \
  -XX:+PrintGCDetails \
  -XX:+PrintGCDateStamps \
  -Xloggc:$LOG_PATH/gc.log \
  -Djava.net.preferIPv4Stack=true \
  -Dfile.encoding=UTF-8 \
  -Dspring.profiles.active=prod"
進(jìn)程 ID 管理

使用PID文件精確控制進(jìn)程,避免多實例沖突:

# PID文件路徑
PID_FILE="./$APP_NAME.pid"

# 啟動函數(shù)改進(jìn)
start() {
if [ -f "$PID_FILE" ] && pgrep -F "$PID_FILE" > /dev/null; then
    echo"$APP_NAME is already running."
    return 1
fi

echo"Starting $APP_NAME..."
  rotate_logs
  nohup java $JVM_OPTS -jar $JAR_FILE --spring.config.location=./ &>/dev/null &
# 寫入PID文件
echo $! > "$PID_FILE"

# ... 狀態(tài)檢查邏輯 ...
}

# 停止函數(shù)改進(jìn)
stop() {
if [ ! -f "$PID_FILE" ] || ! pgrep -F "$PID_FILE" > /dev/null; then
    echo"$APP_NAME is not running."
    return 1
fi

echo"Stopping $APP_NAME..."
# 通過PID文件停止進(jìn)程
kill $(cat "$PID_FILE")

# 等待進(jìn)程終止
  sleep 3
if pgrep -F "$PID_FILE" > /dev/null; then
    echo"Force stopping $APP_NAME..."
    kill -9 $(cat "$PID_FILE")
fi

# 刪除PID文件
  rm -f "$PID_FILE"
echo"$APP_NAME stopped."
}

腳本優(yōu)化與擴展

配置參數(shù)外部化

將關(guān)鍵配置抽取到獨立的環(huán)境變量文件,實現(xiàn)配置與邏輯分離:

# 加載環(huán)境變量配置
if [ -f ".env" ]; then
  source .env
else
  echo "Warning: .env file not found, using default settings."
fi

.env文件示例:

APP_NAME=demo-service
JAR_FILE=./demo-service-1.0.0.jar
LOG_PATH=./logs
JVM_OPTS="-Xms1024m -Xmx2048m -Dspring.profiles.active=prod"


責(zé)任編輯:武曉燕 來源: 一安未來
相關(guān)推薦

2021-06-02 05:41:48

項目實踐Axiosaxios二次封裝

2021-09-01 11:10:55

Spring BootShellJava

2021-02-01 11:01:18

Bash腳本Linux

2021-06-07 13:02:31

Shell腳本Linux

2023-10-07 14:25:14

2022-12-29 15:01:48

SpringBoot增量部署

2021-05-06 15:18:09

Shell腳本Linux

2014-04-22 09:42:12

Bash腳本教程

2013-07-11 13:39:23

Hadoop

2018-04-24 14:52:48

LinuxBash腳本

2010-09-08 09:41:03

私有云部署

2019-08-09 10:58:48

2017-08-11 17:20:07

LinuxShell

2020-10-21 11:55:44

Shell編程語言Linux

2017-07-25 10:57:05

2019-03-11 08:19:39

SSLTLS服務(wù)器

2023-10-12 22:38:18

SpringBoot熱部署

2014-03-18 10:19:55

Hadoop部署hadoop集群腳本

2023-08-08 08:23:08

Spring日志?線程池

2023-01-12 08:50:46

點贊
收藏

51CTO技術(shù)棧公眾號