#!/bin/bash # # cfc-backend 启动脚本 # 用法: ./startup.sh [dev|test|prod] # dev - 本地开发环境,使用 127.0.0.1 MySQL # test - 251 测试环境,使用 192.168.16.251 MySQL # prod - 251 生产环境,使用 192.168.16.251 MySQL # # 外部配置文件优先级高于 JAR 内置配置, # 通过 --spring.config.location 显式加载 config/ 目录下的环境配置。 # set -e # ===== 配置 ===== # PROFILE="${1:-prod}" PROFILE="${1:-dev}" JAR_NAME="cfc-backend-1.0.0.jar" CONFIG_DIR="$(cd "$(dirname "$0")" && pwd)/config" # JAR 路径:与 startup.sh 同目录 APP_DIR="$(cd "$(dirname "$0")" && pwd)" JAR_FILE="$APP_DIR/$JAR_NAME" # 日志文件 LOG_FILE="$APP_DIR/logs/cfc-backend.log" # ===== 验证 ===== if [[ ! -f "$JAR_FILE" ]]; then echo "ERROR: JAR 文件不存在: $JAR_FILE" exit 1 fi if [[ ! -d "$CONFIG_DIR" ]]; then echo "ERROR: 配置目录不存在: $CONFIG_DIR" exit 1 fi CONFIG_FILE="$CONFIG_DIR/application-$PROFILE.yml" if [[ ! -f "$CONFIG_FILE" ]]; then echo "ERROR: 配置文件不存在: $CONFIG_FILE" echo "可用环境: dev | test | prod" exit 1 fi # ===== 日志目录 ===== mkdir -p "$APP_DIR/logs" # ===== 启动 ===== echo "========================================" echo " CFC Backend 启动" echo " 环境: $PROFILE" echo " 配置文件: $CONFIG_FILE" echo " JAR: $JAR_FILE" echo " 日志: $LOG_FILE" echo "========================================" # spring.config.location 末尾的 / 非常重要:表示作为目录搜索, # Spring Boot 会同时加载 application.yml 和 application-{profile}.yml。 # 外部文件覆盖 JAR 内置文件,相同属性以外部文件为准。 # TLS: 强制出站 HTTPS 使用 TLSv1.2 —— Tencent 微信/支付边缘会终止 TLSv1.3 握手(Remote host terminated the handshake) exec java -Dhttps.protocols=TLSv1.2 -Djdk.tls.client.protocols=TLSv1.2 -jar "$JAR_FILE" \ --spring.profiles.active="$PROFILE" \ --spring.config.location="$CONFIG_DIR/" \ >> "$LOG_FILE" 2>&1