Browse Source

feat: start.sh 支持本地外部配置,数据库凭据通过 -D 参数注入

- start.sh: 支持 local/dev/prod 环境切换,数据库配置通过 -Dspring.datasource.*
  完全覆盖 JAR 内置值;config/ 目录存在时自动加载外部配置
- config/application.yml: 新增外部配置模板(数据库/JWT/微信/Dify)
- application.yml: 数据库凭据改为 CHANGE_ME_* 占位符,避免内置生产密码
Xiaogang Liao 2 months ago
parent
commit
6997038146

+ 64 - 0
cfc-backend/config/application.yml

@@ -0,0 +1,64 @@
+# ============================================================
+# 浠艾福 — 本地外部配置(供 start.sh 使用)
+# 此文件覆盖 JAR 内置的 application.yml 默认值
+# ============================================================
+# 适用场景:
+#   - 本地开发: MariaDB 127.0.0.1
+#   - 生产部署: 远程 MySQL 192.168.16.251
+# 切换: 修改 spring.datasource.url / username / password 即可
+# ============================================================
+
+spring:
+  datasource:
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    url: jdbc:mysql://127.0.0.1:3306/zxyj?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true&createDatabaseIfNotExist=true
+    username: root
+    password: cfc123
+    hikari:
+      maximum-pool-size: 20
+      minimum-idle: 5
+      connection-timeout: 30000
+      idle-timeout: 600000
+      max-lifetime: 1800000
+      pool-name: CfcHikariPool
+
+# SFMS 数据源(生产按需开启)
+sfms:
+  datasource:
+    enabled: false
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    url: jdbc:mysql://192.168.16.251:3305/sfms?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
+    username: readonly
+    password: readonly
+
+# JWT 配置
+jwt:
+  secret: cfc-secret-key-2026-spring-boot-jwt-token
+  expiration: 86400000
+
+# 微信配置(生产需填写真实密钥)
+wechat:
+  appid: wx5ba8038ef16fb245
+  secret: YOUR_APP_SECRET_HERE
+  mch-id: YOUR_MCH_ID
+  mch-key: YOUR_MCH_KEY
+  api-v3-key: YOUR_API_V3_KEY
+  mch-serial-no: YOUR_MCH_SERIAL_NO
+  private-key-path: /path/to/apiclient_key.pem
+  notify-url: http://111.228.6.214/api/payment/notify
+  login-url: https://api.weixin.qq.com/sns/jscode2session
+  phone-url: https://api.weixin.qq.com/wxa/business/getuserphonenumber
+  test-mode: true
+  test-phone: "13800138000"
+  alert-template-id: ${WECHAT_ALERT_TEMPLATE_ID:}
+
+# Dify AI 配置
+dify:
+  base-url: http://dify.bianwoyou.cn/v1
+  api-key: app-rtNSAHG2NFzRsXCGkeZlVNR9
+  nutrition-api-key: app-OnHzTiI6EULUfLyceCDqJkQu
+  tongue-api-key: ""
+
+# 运营配置
+admin:
+  skip-captcha: true

+ 3 - 3
cfc-backend/src/main/resources/application.yml

@@ -16,9 +16,9 @@ spring:
     name: cfc-backend
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://127.0.0.1:3306/zxyj?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true&createDatabaseIfNotExist=true
-    username: root
-    password: cfc123
+    url: jdbc:mysql://CHANGE_ME_HOST:3306/zxyj?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true&createDatabaseIfNotExist=true
+    username: CHANGE_ME_USER
+    password: CHANGE_ME_PASS
     hikari:
       maximum-pool-size: 50
       minimum-idle: 10

+ 61 - 18
cfc-backend/start.sh

@@ -1,24 +1,67 @@
 #!/bin/bash
 
-# 浠艾福(CFC) 后端启动脚本
-# JVM 参数: G1GC, 512m初始堆, 2g最大堆
-# 用法: ./start.sh [--debug]
+set -e
+
+SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
+APP_DIR="${SCRIPT_DIR}"
+CONFIG_DIR="${APP_DIR}/config"
+JAR_FILE="${APP_DIR}/target/cfc-backend-1.0.0.jar"
 
 DEBUG_FLAG=""
-if [ "$1" = "--debug" ]; then
-    DEBUG_FLAG="-Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=5005,suspend=n"
+ENV="dev"
+
+for arg in "$@"; do
+    case "$arg" in
+        --debug)  DEBUG_FLAG="-Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=5005,suspend=n" ;;
+        dev)      ENV="dev" ;;
+        prod)     ENV="prod" ;;
+        local)    ENV="local" ;;
+    esac
+done
+
+if [ -z "$FORCE_PROFILE" ] && hostname | grep -qiE "dev|local|test|docker|container"; then
+    ENV="local"
+fi
+
+case "$ENV" in
+    prod)
+        DB_HOST="${DB_HOST:-192.168.16.251}"
+        DB_PORT="${DB_PORT:-3306}"
+        DB_NAME="${DB_NAME:-zxyj}"
+        DB_USER="${DB_USER:-zxyj}"
+        DB_PASS="${DB_PASS:-zxyj@123}"
+        ;;
+    *)
+        DB_HOST="${DB_HOST:-127.0.0.1}"
+        DB_PORT="${DB_PORT:-3306}"
+        DB_NAME="${DB_NAME:-zxyj}"
+        DB_USER="${DB_USER:-root}"
+        DB_PASS="${DB_PASS:-cfc123}"
+        ;;
+esac
+
+DB_URL="jdbc:mysql://${DB_HOST}:${DB_PORT}/${DB_NAME}?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true&createDatabaseIfNotExist=true"
+
+echo "[CFC] ENV=${ENV}, DB=${DB_HOST}:${DB_PORT}/${DB_NAME}"
+
+JAVA_OPTS="
+    -Xms512m
+    -Xmx2g
+    -XX:+UseG1GC
+    -XX:MaxGCPauseMillis=200
+    -XX:+HeapDumpOnOutOfMemoryError
+    -XX:HeapDumpPath=/tmp/cfc-heapdump.hprof
+    -Dfile.encoding=UTF-8
+    -Dspring.profiles.active=${ENV}
+    -Dspring.datasource.url=\"${DB_URL}\"
+    -Dspring.datasource.username=${DB_USER}
+    -Dspring.datasource.password=${DB_PASS}
+"
+
+SPRING_CONFIG_LOC=""
+if [ -d "${CONFIG_DIR}" ] && [ "$(ls -A "${CONFIG_DIR}" 2>/dev/null)" ]; then
+    SPRING_CONFIG_LOC="--spring.config.additional-location=file:${CONFIG_DIR}/"
 fi
 
-cd "$(dirname "$0")"
-
-exec java \
-    $DEBUG_FLAG \
-    -Xms512m \
-    -Xmx2g \
-    -XX:+UseG1GC \
-    -XX:MaxGCPauseMillis=200 \
-    -XX:+HeapDumpOnOutOfMemoryError \
-    -XX:HeapDumpPath=/tmp/cfc-heapdump.hprof \
-    -Dfile.encoding=UTF-8 \
-    -Dspring.profiles.active=prod \
-    -jar target/cfc-backend-1.0.0.jar
+cd "${APP_DIR}"
+exec java ${DEBUG_FLAG} ${JAVA_OPTS} ${SPRING_CONFIG_LOC} -jar "${JAR_FILE}"