阶段二:认证授权模块 - User实体类、Mapper、DataService - Token服务(Redis存储)、密码加密(BCrypt) - 认证拦截器、UserContext上下文 - 登录/登出接口 阶段三:核心业务模块 - 用户管理:CRUD、状态管理、密码重置 - 模板管理:CRUD、状态管理 - 工作日志:CRUD、权限控制 配置分离架构 - env.properties(环境敏感配置) - service.properties(服务配置) - logback-spring.xml更新 部署脚本 - deploy/目录(Nginx配置、启停脚本、备份脚本) 单元测试:29个测试全部通过
111 lines
3.3 KiB
Bash
Executable File
111 lines
3.3 KiB
Bash
Executable File
#!/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}/${APP_JAR}"
|
||
|
||
# 配置文件加载函数
|
||
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 "JAR 文件: ${APP_JAR_PATH}"
|
||
echo "========================================="
|
||
|
||
nohup java ${JVM_OPTS} -jar "${APP_JAR_PATH}" ${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
|