zhangjf 8190887de8 feat: 数据库脚本优化、前端部署脚本、租户ID支持
- 数据库脚本优化
  - 新增01_create_user.sql创建fundsp用户
  - 新增02_grant_user.sql授权脚本
  - 新增fund_exp_init.sql、fund_receipt_init.sql
  - 修复SQL脚本与实体类一致性
  - 密码更新为fundSP@123

- 前端部署脚本
  - 新增build-frontend.sh前端构建脚本
  - 新增deploy-frontend-nginx.sh Nginx部署脚本
  - 打包输出到deploy目录

- 租户ID支持
  - fund-admin/fund-mobile支持query参数读取tid
  - 新增tenant.ts store管理租户状态
  - 请求拦截器添加X-Tenant-Id header

- 启动脚本修复
  - 修复INSTANCE_NAME变量替换问题
  - 更新所有service.properties配置

- 配置更新
  - 更新所有服务数据库密码
  - 更新docker-compose.yml配置
2026-02-22 19:45:52 +08:00

99 lines
2.8 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)
# 跳过空值
[[ -z "$value" ]] && continue
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: 如果为空或为字面值${APP_NAME}则使用APP_NAME
if [[ -z "${INSTANCE_NAME}" ]] || [[ "${INSTANCE_NAME}" == '\${APP_NAME}' ]]; then
INSTANCE_NAME=${APP_NAME}
fi
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))"