start.sh
1.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/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