feat: 配置文件分离为统一配置和个性化配置

- 新增service.properties:每个服务独立的个性化配置
  - APP_NAME: 服务名称
  - INSTANCE_NAME: 实例名称(多租户场景)
  - TENANT_ID: 租户标识

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

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

- 更新assembly.xml:service.properties打包到conf目录
- 更新启动脚本:统一使用load_properties函数加载配置
This commit is contained in:
zhangjf 2026-02-22 16:10:03 +08:00
parent dd8de5d96e
commit 1225d8387e
14 changed files with 190 additions and 60 deletions

View File

@ -37,6 +37,7 @@
<include>application.yml</include> <include>application.yml</include>
<include>logback-spring.xml</include> <include>logback-spring.xml</include>
<include>bootstrap.yml</include> <include>bootstrap.yml</include>
<include>service.properties</include>
</includes> </includes>
<excludes> <excludes>
<!-- 排除docker相关配置 --> <!-- 排除docker相关配置 -->

View File

@ -0,0 +1,13 @@
# ============================================
# 服务个性化配置
# 此文件随服务打包,每个服务独立配置
# ============================================
# 服务名称
APP_NAME=fund-cust
# 实例名称(多租户场景使用)
INSTANCE_NAME=${APP_NAME}
# 租户标识
TENANT_ID=

View File

@ -0,0 +1,13 @@
# ============================================
# 服务个性化配置
# 此文件随服务打包,每个服务独立配置
# ============================================
# 服务名称
APP_NAME=fund-exp
# 实例名称(多租户场景使用)
INSTANCE_NAME=${APP_NAME}
# 租户标识
TENANT_ID=

View File

@ -0,0 +1,13 @@
# ============================================
# 服务个性化配置
# 此文件随服务打包,每个服务独立配置
# ============================================
# 服务名称
APP_NAME=fund-file
# 实例名称
INSTANCE_NAME=${APP_NAME}
# 租户标识(文件服务为共享服务,无需租户标识)
TENANT_ID=

View File

@ -0,0 +1,13 @@
# ============================================
# 服务个性化配置
# 此文件随服务打包,每个服务独立配置
# ============================================
# 服务名称
APP_NAME=fund-gateway
# 实例名称(多租户场景使用)
INSTANCE_NAME=${APP_NAME}
# 租户标识
TENANT_ID=

View File

@ -0,0 +1,13 @@
# ============================================
# 服务个性化配置
# 此文件随服务打包,每个服务独立配置
# ============================================
# 服务名称
APP_NAME=fund-proj
# 实例名称(多租户场景使用)
INSTANCE_NAME=${APP_NAME}
# 租户标识
TENANT_ID=

View File

@ -0,0 +1,13 @@
# ============================================
# 服务个性化配置
# 此文件随服务打包,每个服务独立配置
# ============================================
# 服务名称
APP_NAME=fund-receipt
# 实例名称(多租户场景使用)
INSTANCE_NAME=${APP_NAME}
# 租户标识
TENANT_ID=

View File

@ -0,0 +1,13 @@
# ============================================
# 服务个性化配置
# 此文件随服务打包,每个服务独立配置
# ============================================
# 服务名称
APP_NAME=fund-report
# 实例名称
INSTANCE_NAME=${APP_NAME}
# 租户标识(报表服务为共享服务,无需租户标识)
TENANT_ID=

View File

@ -0,0 +1,13 @@
# ============================================
# 服务个性化配置
# 此文件随服务打包,每个服务独立配置
# ============================================
# 服务名称
APP_NAME=fund-req
# 实例名称(多租户场景使用)
INSTANCE_NAME=${APP_NAME}
# 租户标识
TENANT_ID=

View File

@ -0,0 +1,18 @@
# ============================================
# 服务个性化配置
# 此文件随服务打包,每个服务独立配置
# ============================================
# 服务名称对应JAR文件名用于Nacos服务注册
APP_NAME=fund-sys
# 实例名称多租户场景使用默认与APP_NAME相同
# 多租户示例fund-sys-shared, fund-sys-vip001
INSTANCE_NAME=${APP_NAME}
# 租户标识多租户场景使用用于Nacos元数据路由
# 空值=共享实例,有值=VIP专属实例
TENANT_ID=
# 服务端口可覆盖application.yml中的配置
# SERVER_PORT=8100

View File

@ -1,17 +1,9 @@
# ============================================ # ============================================
# 环境变量配置文件 # 环境变量配置文件(所有服务共用)
# 服务启动时会加载此文件 # 服务启动时会加载此文件
# 注意个性化参数请在各服务的service.properties中配置
# ============================================ # ============================================
# --------------------------------------------
# 实例配置(多租户模式需要修改)
# --------------------------------------------
# 实例名称用于区分多租户实例如fund-sys-shared, fund-sys-vip001
# 默认与JAR文件名相同多租户模式下需要修改
# INSTANCE_NAME=fund-sys
# 租户标识多租户模式使用用于Nacos元数据路由
TENANT_ID=
# -------------------------------------------- # --------------------------------------------
# Nacos配置所有服务共用 # Nacos配置所有服务共用
# -------------------------------------------- # --------------------------------------------

View File

@ -6,34 +6,42 @@
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 # 加载函数读取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) JAR_FILE=$(ls ${APP_HOME}/lib/*.jar 2>/dev/null | head -1)
if [ -z "$JAR_FILE" ]; then if [ -z "$JAR_FILE" ]; then
echo "Error: No JAR file found in ${APP_HOME}/lib/" echo "Error: No JAR file found in ${APP_HOME}/lib/"
exit 1 exit 1
fi fi
APP_NAME=$(basename "$JAR_FILE" .jar)
# 加载环境变量配置 # 5. 日志目录使用INSTANCE_NAME区分不同实例
if [ -f "${APP_HOME}/conf/env.properties" ]; then
while IFS='=' read -r key value; do
[[ "$key" =~ ^#.*$ ]] && continue
[[ -z "$key" ]] && continue
key=$(echo "$key" | xargs)
value=$(echo "$value" | xargs)
# 跳过APP_NAME因为已从JAR文件推断
[[ "$key" == "APP_NAME" ]] && continue
export "$key=$value"
done < "${APP_HOME}/conf/env.properties"
fi
# 实例名称用于区分多租户实例默认与APP_NAME相同
INSTANCE_NAME=${INSTANCE_NAME:-${APP_NAME}}
# 日志目录使用INSTANCE_NAME区分不同实例
LOG_HOME="/datacfs/applogs/${INSTANCE_NAME}" LOG_HOME="/datacfs/applogs/${INSTANCE_NAME}"
# PID文件路径使用INSTANCE_NAME # 6. PID文件路径
PID_FILE="${APP_HOME}/${INSTANCE_NAME}.pid" PID_FILE="${APP_HOME}/${INSTANCE_NAME}.pid"
# JVM参数可通过环境变量覆盖 # JVM参数可通过环境变量覆盖

View File

@ -6,24 +6,28 @@
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 # 加载函数读取properties文件
JAR_FILE=$(ls ${APP_HOME}/lib/*.jar 2>/dev/null | head -1) load_properties() {
APP_NAME=$(basename "$JAR_FILE" .jar) 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
}
# 加载环境变量配置 # 加载配置文件(先统一,后个性化)
if [ -f "${APP_HOME}/conf/env.properties" ]; then load_properties "${APP_HOME}/conf/env.properties"
while IFS='=' read -r key value; do load_properties "${APP_HOME}/conf/service.properties"
[[ "$key" =~ ^#.*$ ]] && continue
[[ -z "$key" ]] && continue
key=$(echo "$key" | xargs)
value=$(echo "$value" | xargs)
[[ "$key" == "APP_NAME" ]] && continue
export "$key=$value"
done < "${APP_HOME}/conf/env.properties"
fi
# 实例名称 # 设置默认值
APP_NAME=${APP_NAME:-"unknown"}
INSTANCE_NAME=${INSTANCE_NAME:-${APP_NAME}} INSTANCE_NAME=${INSTANCE_NAME:-${APP_NAME}}
TENANT_ID=${TENANT_ID:-""}
# PID文件路径 # PID文件路径
PID_FILE="${APP_HOME}/${INSTANCE_NAME}.pid" PID_FILE="${APP_HOME}/${INSTANCE_NAME}.pid"

View File

@ -6,23 +6,26 @@
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 # 加载函数读取properties文件
JAR_FILE=$(ls ${APP_HOME}/lib/*.jar 2>/dev/null | head -1) load_properties() {
APP_NAME=$(basename "$JAR_FILE" .jar) 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
}
# 加载环境变量配置 # 加载配置文件(先统一,后个性化)
if [ -f "${APP_HOME}/conf/env.properties" ]; then load_properties "${APP_HOME}/conf/env.properties"
while IFS='=' read -r key value; do load_properties "${APP_HOME}/conf/service.properties"
[[ "$key" =~ ^#.*$ ]] && continue
[[ -z "$key" ]] && continue
key=$(echo "$key" | xargs)
value=$(echo "$value" | xargs)
[[ "$key" == "APP_NAME" ]] && continue
export "$key=$value"
done < "${APP_HOME}/conf/env.properties"
fi
# 实例名称 # 设置默认值
APP_NAME=${APP_NAME:-"unknown"}
INSTANCE_NAME=${INSTANCE_NAME:-${APP_NAME}} INSTANCE_NAME=${INSTANCE_NAME:-${APP_NAME}}
# PID文件路径 # PID文件路径