start.sh 1.59 KB
#!/usr/bin/env bash
# 一键启动:后端元数据引擎(8080) + 前端渲染引擎(5173/自动顺延)
# 用法: ./start.sh
set -euo pipefail
ROOT="$(cd "$(dirname "$0")" && pwd)"

echo "==> 环境检查(Maven 由 ./mvnw 包装器自动下载,无需预装)"
command -v java >/dev/null || { echo "缺少 Java (建议 21+)"; exit 1; }
command -v node >/dev/null || { echo "缺少 Node.js (建议 18+)"; exit 1; }
command -v npm  >/dev/null || { echo "缺少 npm"; exit 1; }

ENGINE_LOG="$ROOT/.engine.log"
echo "==> 启动后端引擎 (日志: $ENGINE_LOG;首次会下载 Maven 与依赖)"
( cd "$ROOT/engine" && ./mvnw -q -DskipTests spring-boot:run > "$ENGINE_LOG" 2>&1 ) &
ENGINE_PID=$!

cleanup() {
  echo; echo "==> 停止服务"
  kill "$ENGINE_PID" 2>/dev/null || true
  # 兜底:杀掉占用 8080 的子进程
  if command -v lsof >/dev/null; then
    PIDS=$(lsof -ti tcp:8080 2>/dev/null || true); [ -n "$PIDS" ] && kill $PIDS 2>/dev/null || true
  fi
}
trap cleanup EXIT INT TERM

echo "==> 等待引擎就绪 (http://localhost:8080)"
for i in $(seq 1 60); do
  if curl -s -o /dev/null http://localhost:8080/api/meta/models 2>/dev/null; then
    echo "    引擎已就绪 ✔"; break
  fi
  sleep 2
  [ "$i" = "60" ] && { echo "引擎启动超时,请查看 $ENGINE_LOG"; exit 1; }
done

echo "==> 安装前端依赖 (首次)"
( cd "$ROOT/web" && [ -d node_modules ] || npm install )

echo "==> 启动前端 (Vite)。浏览器打开提示的 Local 地址,进入「新增订单」页。"
echo "    后端: http://localhost:8080   H2 控制台: http://localhost:8080/h2-console"
cd "$ROOT/web" && npm run dev