refactor: APP_NAME从JAR文件自动推断

- APP_NAME不再写在env.properties,而是从lib/*.jar自动推断
- env.properties只保留INSTANCE_NAME和TENANT_ID(多租户场景使用)
- 所有脚本(start.sh/stop.sh/status.sh)统一从JAR文件获取APP_NAME
- 避免打包后所有服务的env.properties都一样导致APP_NAME冲突
This commit is contained in:
zhangjf 2026-02-22 15:59:53 +08:00
parent 3e73b6c086
commit dd8de5d96e
4 changed files with 26 additions and 20 deletions

View File

@ -4,13 +4,11 @@
# ============================================ # ============================================
# -------------------------------------------- # --------------------------------------------
# 服务标识配置 # 实例配置(多租户模式需要修改)
# -------------------------------------------- # --------------------------------------------
# 服务名称对应JAR文件名如fund-sys
APP_NAME=fund-sys
# 实例名称用于区分多租户实例如fund-sys-shared, fund-sys-vip001 # 实例名称用于区分多租户实例如fund-sys-shared, fund-sys-vip001
# 默认与APP_NAME相同,多租户模式下需要修改 # 默认与JAR文件名相同多租户模式下需要修改
INSTANCE_NAME=${APP_NAME} # INSTANCE_NAME=fund-sys
# 租户标识多租户模式使用用于Nacos元数据路由 # 租户标识多租户模式使用用于Nacos元数据路由
TENANT_ID= TENANT_ID=

View File

@ -6,33 +6,33 @@
SCRIPT_DIR=$(dirname "$(readlink -f "$0")") SCRIPT_DIR=$(dirname "$(readlink -f "$0")")
APP_HOME=$(dirname "$SCRIPT_DIR") APP_HOME=$(dirname "$SCRIPT_DIR")
# 加载环境变量配置优先从env.properties读取 # 自动从lib目录下的JAR文件推断APP_NAME
JAR_FILE=$(ls ${APP_HOME}/lib/*.jar 2>/dev/null | head -1)
if [ -z "$JAR_FILE" ]; then
echo "Error: No JAR file found in ${APP_HOME}/lib/"
exit 1
fi
APP_NAME=$(basename "$JAR_FILE" .jar)
# 加载环境变量配置
if [ -f "${APP_HOME}/conf/env.properties" ]; then if [ -f "${APP_HOME}/conf/env.properties" ]; then
# 读取APP_NAME和INSTANCE_NAME
while IFS='=' read -r key value; do while IFS='=' read -r key value; do
# 跳过注释和空行
[[ "$key" =~ ^#.*$ ]] && continue [[ "$key" =~ ^#.*$ ]] && continue
[[ -z "$key" ]] && continue [[ -z "$key" ]] && continue
# 去除前后空格
key=$(echo "$key" | xargs) key=$(echo "$key" | xargs)
value=$(echo "$value" | xargs) value=$(echo "$value" | xargs)
# 导出环境变量 # 跳过APP_NAME因为已从JAR文件推断
[[ "$key" == "APP_NAME" ]] && continue
export "$key=$value" export "$key=$value"
done < "${APP_HOME}/conf/env.properties" done < "${APP_HOME}/conf/env.properties"
fi fi
# 服务名称对应JAR文件名从env.properties读取或从目录名推断
APP_NAME=${APP_NAME:-$(basename "$APP_HOME")}
# 实例名称用于区分多租户实例默认与APP_NAME相同 # 实例名称用于区分多租户实例默认与APP_NAME相同
INSTANCE_NAME=${INSTANCE_NAME:-${APP_NAME}} INSTANCE_NAME=${INSTANCE_NAME:-${APP_NAME}}
# 日志目录使用INSTANCE_NAME区分不同实例 # 日志目录使用INSTANCE_NAME区分不同实例
LOG_HOME="/datacfs/applogs/${INSTANCE_NAME}" LOG_HOME="/datacfs/applogs/${INSTANCE_NAME}"
# JAR文件路径使用APP_NAME找JAR
JAR_FILE="${APP_HOME}/lib/${APP_NAME}.jar"
# PID文件路径使用INSTANCE_NAME # PID文件路径使用INSTANCE_NAME
PID_FILE="${APP_HOME}/${INSTANCE_NAME}.pid" PID_FILE="${APP_HOME}/${INSTANCE_NAME}.pid"

View File

@ -6,6 +6,10 @@
SCRIPT_DIR=$(dirname "$(readlink -f "$0")") SCRIPT_DIR=$(dirname "$(readlink -f "$0")")
APP_HOME=$(dirname "$SCRIPT_DIR") APP_HOME=$(dirname "$SCRIPT_DIR")
# 自动从lib目录下的JAR文件推断APP_NAME
JAR_FILE=$(ls ${APP_HOME}/lib/*.jar 2>/dev/null | head -1)
APP_NAME=$(basename "$JAR_FILE" .jar)
# 加载环境变量配置 # 加载环境变量配置
if [ -f "${APP_HOME}/conf/env.properties" ]; then if [ -f "${APP_HOME}/conf/env.properties" ]; then
while IFS='=' read -r key value; do while IFS='=' read -r key value; do
@ -13,12 +17,12 @@ if [ -f "${APP_HOME}/conf/env.properties" ]; then
[[ -z "$key" ]] && continue [[ -z "$key" ]] && continue
key=$(echo "$key" | xargs) key=$(echo "$key" | xargs)
value=$(echo "$value" | xargs) value=$(echo "$value" | xargs)
[[ "$key" == "APP_NAME" ]] && continue
export "$key=$value" export "$key=$value"
done < "${APP_HOME}/conf/env.properties" done < "${APP_HOME}/conf/env.properties"
fi fi
# 服务名称和实例名称 # 实例名称
APP_NAME=${APP_NAME:-$(basename "$APP_HOME")}
INSTANCE_NAME=${INSTANCE_NAME:-${APP_NAME}} INSTANCE_NAME=${INSTANCE_NAME:-${APP_NAME}}
# PID文件路径 # PID文件路径

View File

@ -6,6 +6,10 @@
SCRIPT_DIR=$(dirname "$(readlink -f "$0")") SCRIPT_DIR=$(dirname "$(readlink -f "$0")")
APP_HOME=$(dirname "$SCRIPT_DIR") APP_HOME=$(dirname "$SCRIPT_DIR")
# 自动从lib目录下的JAR文件推断APP_NAME
JAR_FILE=$(ls ${APP_HOME}/lib/*.jar 2>/dev/null | head -1)
APP_NAME=$(basename "$JAR_FILE" .jar)
# 加载环境变量配置 # 加载环境变量配置
if [ -f "${APP_HOME}/conf/env.properties" ]; then if [ -f "${APP_HOME}/conf/env.properties" ]; then
while IFS='=' read -r key value; do while IFS='=' read -r key value; do
@ -13,12 +17,12 @@ if [ -f "${APP_HOME}/conf/env.properties" ]; then
[[ -z "$key" ]] && continue [[ -z "$key" ]] && continue
key=$(echo "$key" | xargs) key=$(echo "$key" | xargs)
value=$(echo "$value" | xargs) value=$(echo "$value" | xargs)
[[ "$key" == "APP_NAME" ]] && continue
export "$key=$value" export "$key=$value"
done < "${APP_HOME}/conf/env.properties" done < "${APP_HOME}/conf/env.properties"
fi fi
# 服务名称和实例名称 # 实例名称
APP_NAME=${APP_NAME:-$(basename "$APP_HOME")}
INSTANCE_NAME=${INSTANCE_NAME:-${APP_NAME}} INSTANCE_NAME=${INSTANCE_NAME:-${APP_NAME}}
# PID文件路径 # PID文件路径