@echo off chcp 65001 > nul setlocal enabledelayedexpansion :: ============================================================= :: 智价云(药店版) - Windows 开发环境启动脚本 :: 用法:双击运行 或 start-dev.bat [start|stop|build] :: 依赖:Docker Desktop、JDK 17、Maven 3.8+ :: ============================================================= title 智价云(药店版) - 开发环境 set APP_NAME=zhijiayun-pharmacy set JAR_NAME=zhijiayun-gateway-1.0.0.jar set PROJECT_DIR=%~dp0.. set JAR_PATH=%PROJECT_DIR%\zhijiayun-gateway\target\%JAR_NAME% set LOG_DIR=%PROJECT_DIR%\logs :: JVM 参数 set JAVA_OPTS=-Xms256m -Xmx768m -XX:+UseG1GC -Dfile.encoding=UTF-8 -Duser.timezone=Asia/Shanghai set ACTION=%1 if "%ACTION%"=="" set ACTION=start if "%ACTION%"=="start" goto :do_start if "%ACTION%"=="stop" goto :do_stop if "%ACTION%"=="build" goto :do_build if "%ACTION%"=="infra" goto :do_infra goto :show_help :: ============================================================ :do_infra :: 启动 Docker 基础设施(MySQL + Redis) echo [INFO] 检查 Docker 是否运行... docker info > nul 2>&1 if errorlevel 1 ( echo [ERROR] Docker 未运行,请先启动 Docker Desktop pause exit /b 1 ) echo [INFO] 启动 MySQL 容器... docker start mysql8 > nul 2>&1 || ( echo [INFO] 创建 MySQL 容器... docker run -d ^ --name mysql8 ^ -e MYSQL_ROOT_PASSWORD=Root@123456 ^ -e MYSQL_DATABASE=zhijiayun_pharmacy ^ -e TZ=Asia/Shanghai ^ -p 3308:3306 ^ mysql:8.0 ^ --character-set-server=utf8mb4 ^ --collation-server=utf8mb4_unicode_ci ^ --default-time-zone=+08:00 ) echo [INFO] 启动 Redis 容器... docker start redis7 > nul 2>&1 || ( echo [INFO] 创建 Redis 容器... docker run -d ^ --name redis7 ^ -p 6379:6379 ^ redis:7 ^ redis-server --requirepass 123456 ) echo [INFO] 等待数据库就绪... timeout /t 5 /nobreak > nul echo [INFO] ✅ 基础设施已启动 echo MySQL: localhost:3308 (root / Root@123456) echo Redis: localhost:6379 (密码: 123456) goto :eof :: ============================================================ :do_build echo [INFO] Maven 打包(跳过测试)... cd /d "%PROJECT_DIR%" call mvn clean package -DskipTests -pl zhijiayun-gateway -am if errorlevel 1 ( echo [ERROR] 构建失败,请查看上方错误信息 pause exit /b 1 ) echo [INFO] ✅ 构建完成:%JAR_PATH% goto :eof :: ============================================================ :do_start :: 检查 JAR 是否存在,若不存在则自动构建 if not exist "%JAR_PATH%" ( echo [WARN] JAR 包不存在,自动执行构建... call :do_build ) :: 确保基础设施运行 call :do_infra :: 检查端口是否被占用 netstat -ano | findstr ":8001 " | findstr "LISTENING" > nul 2>&1 if not errorlevel 1 ( echo [WARN] 端口 8001 已被占用,请先停止旧进程 netstat -ano | findstr ":8001 " | findstr "LISTENING" pause exit /b 1 ) echo. echo [INFO] 启动 %APP_NAME%(开发环境 dev profile)... echo [INFO] 日志目录:%LOG_DIR% echo [INFO] 访问地址:http://localhost:8001 echo [INFO] 按 Ctrl+C 停止应用 echo. if not exist "%LOG_DIR%" mkdir "%LOG_DIR%" java %JAVA_OPTS% ^ -jar "%JAR_PATH%" ^ --spring.profiles.active=dev goto :eof :: ============================================================ :do_stop echo [INFO] 查找并停止 %APP_NAME%... for /f "tokens=5" %%i in ('netstat -ano ^| findstr ":8001 " ^| findstr "LISTENING"') do ( echo [INFO] 终止进程 PID=%%i taskkill /PID %%i /F > nul 2>&1 ) echo [INFO] ✅ 应用已停止 goto :eof :: ============================================================ :show_help echo 用法: start-dev.bat [命令] echo. echo (无参数) 启动应用(自动构建+启动基础设施) echo start 同上 echo stop 停止应用(释放 8001 端口) echo build 仅 Maven 打包,不启动 echo infra 仅启动 Docker MySQL/Redis,不启动应用 echo. pause goto :eof