zhangjf 1225d8387e feat: 配置文件分离为统一配置和个性化配置
- 新增service.properties:每个服务独立的个性化配置
  - APP_NAME: 服务名称
  - INSTANCE_NAME: 实例名称(多租户场景)
  - TENANT_ID: 租户标识

- env.properties:所有服务共用的统一配置
  - Nacos/Redis/日志等公共参数

- 加载顺序:先env.properties,后service.properties(个性化覆盖统一)

- 更新assembly.xml:service.properties打包到conf目录
- 更新启动脚本:统一使用load_properties函数加载配置
2026-02-22 16:10:03 +08:00

94 lines
2.6 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
# 服务启动脚本
# 支持多租户模式:同一服务可部署多个实例(数据库连接不同)
# 获取脚本所在目录
SCRIPT_DIR=$(dirname "$(readlink -f "$0")")
APP_HOME=$(dirname "$SCRIPT_DIR")
# 加载函数读取properties文件
load_properties() {
local file="$1"
if [ -f "$file" ]; then
while IFS='=' read -r key value; do
[[ "$key" =~ ^#.*$ ]] && continue
[[ -z "$key" ]] && continue
key=$(echo "$key" | xargs)
value=$(echo "$value" | xargs)
export "$key=$value"
done < "$file"
fi
}
# 1. 加载统一环境配置
load_properties "${APP_HOME}/conf/env.properties"
# 2. 加载服务个性化配置(覆盖统一配置)
load_properties "${APP_HOME}/conf/service.properties"
# 3. 设置默认值
APP_NAME=${APP_NAME:-"unknown"}
INSTANCE_NAME=${INSTANCE_NAME:-${APP_NAME}}
TENANT_ID=${TENANT_ID:-""}
# 4. JAR文件路径
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
# 5. 日志目录使用INSTANCE_NAME区分不同实例
LOG_HOME="/datacfs/applogs/${INSTANCE_NAME}"
# 6. PID文件路径
PID_FILE="${APP_HOME}/${INSTANCE_NAME}.pid"
# JVM参数可通过环境变量覆盖
JAVA_OPTS="${JAVA_OPTS:--Xms256m -Xmx512m -XX:+UseG1GC -XX:MaxGCPauseMillis=200}"
# 日志参数从env.properties读取或使用默认值
LOG_OPTS="-Dlogging.file.path=${LOG_HOME}"
LOG_OPTS="$LOG_OPTS -Dspring.application.name=${APP_NAME}"
LOG_OPTS="$LOG_OPTS -Dlogging.level.root=${LOG_LEVEL_ROOT:-INFO}"
LOG_OPTS="$LOG_OPTS -Dlogging.level.app=${LOG_LEVEL_APP:-DEBUG}"
LOG_OPTS="$LOG_OPTS -Dlogging.pattern.console=${LOG_PATTERN}"
# 多租户参数
TENANT_OPTS=""
if [ -n "${TENANT_ID}" ]; then
TENANT_OPTS="-DTENANT_ID=${TENANT_ID}"
fi
# 配置文件路径
CONFIG_OPTS="--spring.config.location=${APP_HOME}/conf/application.yml"
# 检查是否已运行
if [ -f "$PID_FILE" ]; then
PID=$(cat $PID_FILE)
if ps -p $PID > /dev/null 2>&1; then
echo "${INSTANCE_NAME} is already running (PID: $PID)"
exit 1
fi
fi
# 创建日志目录
mkdir -p ${LOG_HOME}
# 启动服务
echo "Starting ${INSTANCE_NAME}..."
echo " APP_NAME: ${APP_NAME}"
echo " INSTANCE_NAME: ${INSTANCE_NAME}"
echo " APP_HOME: ${APP_HOME}"
echo " LOG_HOME: ${LOG_HOME}"
echo " JAVA_OPTS: ${JAVA_OPTS}"
if [ -n "${TENANT_ID}" ]; then
echo " TENANT_ID: ${TENANT_ID}"
fi
nohup java $JAVA_OPTS $LOG_OPTS $TENANT_OPTS -jar $JAR_FILE $CONFIG_OPTS > /dev/null 2>&1 &
# 保存PID
echo $! > $PID_FILE
echo "${INSTANCE_NAME} started (PID: $(cat $PID_FILE))"