zhangjf d627b19976 feat: 优化打包配置,生成瘦JAR和分离依赖
- 禁用 spring-boot-maven-plugin 的 repackage
- 配置 maven-jar-plugin 指定主类
- assembly.xml 只输出 tar.gz 格式
- 应用 JAR (97KB) 只包含业务代码
- 依赖 JAR (87个) 单独打包到 lib 目录
- 更新 start.sh 使用 -cp 方式启动
- 更新 .gitignore 忽略打包输出
2026-02-24 18:09:04 +08:00

116 lines
3.5 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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