#!/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 与依赖)" echo " 默认存储为 MySQL(127.0.0.1:3307);如无 MySQL,请改用 './mvnw -Dspring-boot.run.profiles=h2 spring-boot:run' 起 H2。" ( 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(默认连 MySQL:3307;无 MySQL 时可用 --spring.profiles.active=h2 起 H2 内存库)" cd "$ROOT/web" && npm run dev