- 禁用 spring-boot-maven-plugin 的 repackage - 配置 maven-jar-plugin 指定主类 - assembly.xml 只输出 tar.gz 格式 - 应用 JAR (97KB) 只包含业务代码 - 依赖 JAR (87个) 单独打包到 lib 目录 - 更新 start.sh 使用 -cp 方式启动 - 更新 .gitignore 忽略打包输出
116 lines
3.5 KiB
Bash
Executable File
116 lines
3.5 KiB
Bash
Executable File
#!/bin/bash
|
||
# ====================================================
|
||
# 工作日志服务平台 - 应用启动脚本
|
||
# ====================================================
|
||
|
||
# 应用配置
|
||
APP_NAME="worklog-api"
|
||
APP_JAR="worklog-api-1.0.0.jar"
|
||
APP_HOME="/opt/worklog/${APP_NAME}"
|
||
APP_JAR_PATH="${APP_HOME}/lib/${APP_JAR}"
|
||
MAIN_CLASS="com.wjbl.worklog.WorklogApplication"
|
||
|
||
# Classpath 配置(lib 目录下所有 JAR + conf 目录)
|
||
CLASSPATH="${APP_HOME}/lib/*:${APP_HOME}/conf"
|
||
|
||
# 配置文件加载函数
|
||
load_properties() {
|
||
local file=$1
|
||
if [ -f "${file}" ]; then
|
||
echo "加载配置文件: ${file}"
|
||
while IFS='=' read -r key value; do
|
||
# 跳过注释和空行
|
||
[[ ${key} =~ ^#.*$ ]] && continue
|
||
[[ -z ${key} ]] && continue
|
||
# 去除前后空格
|
||
key=$(echo ${key} | xargs)
|
||
value=$(echo ${value} | xargs)
|
||
# 导出环境变量
|
||
if [ -n "${key}" ] && [ -n "${value}" ]; then
|
||
export "${key}=${value}"
|
||
fi
|
||
done < "${file}"
|
||
else
|
||
echo "警告: 配置文件不存在 ${file}"
|
||
fi
|
||
}
|
||
|
||
# 1. 加载统一环境配置
|
||
load_properties "${APP_HOME}/conf/env.properties"
|
||
|
||
# 2. 加载服务个性化配置(覆盖同名参数)
|
||
load_properties "${APP_HOME}/conf/service.properties"
|
||
|
||
# JVM 配置(从环境变量读取,如果未设置则使用默认值)
|
||
JVM_XMS=${JVM_XMS:-512m}
|
||
JVM_XMX=${JVM_XMX:-1024m}
|
||
JVM_METASPACE_SIZE=${JVM_METASPACE_SIZE:-128m}
|
||
JVM_MAX_METASPACE_SIZE=${JVM_MAX_METASPACE_SIZE:-256m}
|
||
JVM_GC_TYPE=${JVM_GC_TYPE:-G1GC}
|
||
JVM_MAX_GC_PAUSE_MILLIS=${JVM_MAX_GC_PAUSE_MILLIS:-200}
|
||
|
||
JVM_OPTS="-Xms${JVM_XMS} -Xmx${JVM_XMX} -XX:MetaspaceSize=${JVM_METASPACE_SIZE} -XX:MaxMetaspaceSize=${JVM_MAX_METASPACE_SIZE}"
|
||
JVM_OPTS="${JVM_OPTS} -XX:+Use${JVM_GC_TYPE} -XX:MaxGCPauseMillis=${JVM_MAX_GC_PAUSE_MILLIS}"
|
||
JVM_OPTS="${JVM_OPTS} -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${APP_HOME}/logs/heapdump.hprof"
|
||
JVM_OPTS="${JVM_OPTS} -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:${APP_HOME}/logs/gc.log"
|
||
|
||
# Spring Boot 配置(从环境变量读取)
|
||
SPRING_PROFILE=${SPRING_PROFILES_ACTIVE:-prod}
|
||
SPRING_OPTS="--spring.profiles.active=${SPRING_PROFILE}"
|
||
|
||
# 日志文件
|
||
LOG_DIR="${APP_HOME}/logs"
|
||
CONSOLE_LOG="${LOG_DIR}/console.log"
|
||
PID_FILE="${APP_HOME}/${APP_NAME}.pid"
|
||
|
||
# 创建日志目录
|
||
mkdir -p "${LOG_DIR}"
|
||
|
||
# 检查应用是否已运行
|
||
if [ -f "${PID_FILE}" ]; then
|
||
PID=$(cat "${PID_FILE}")
|
||
if ps -p ${PID} > /dev/null 2>&1; then
|
||
echo "应用已在运行中,PID: ${PID}"
|
||
exit 1
|
||
else
|
||
echo "发现残留 PID 文件,正在清理..."
|
||
rm -f "${PID_FILE}"
|
||
fi
|
||
fi
|
||
|
||
# 检查 JAR 文件是否存在
|
||
if [ ! -f "${APP_JAR_PATH}" ]; then
|
||
echo "ERROR: 找不到应用 JAR 文件: ${APP_JAR_PATH}"
|
||
exit 1
|
||
fi
|
||
|
||
# 启动应用
|
||
echo "========================================="
|
||
echo "启动应用: ${APP_NAME}"
|
||
echo "主类: ${MAIN_CLASS}"
|
||
echo "Classpath: ${CLASSPATH}"
|
||
echo "========================================="
|
||
|
||
nohup java ${JVM_OPTS} -cp "${CLASSPATH}" ${MAIN_CLASS} ${SPRING_OPTS} \
|
||
> "${CONSOLE_LOG}" 2>&1 &
|
||
|
||
PID=$!
|
||
echo ${PID} > "${PID_FILE}"
|
||
|
||
echo "应用启动中,PID: ${PID}"
|
||
echo "日志文件: ${CONSOLE_LOG}"
|
||
|
||
# 等待应用启动
|
||
sleep 5
|
||
|
||
# 检查应用是否启动成功
|
||
if ps -p ${PID} > /dev/null 2>&1; then
|
||
echo "应用启动成功!"
|
||
echo "查看日志: tail -f ${CONSOLE_LOG}"
|
||
exit 0
|
||
else
|
||
echo "ERROR: 应用启动失败,请查看日志"
|
||
rm -f "${PID_FILE}"
|
||
exit 1
|
||
fi
|