@echo off chcp 65001 > nul setlocal enabledelayedexpansion :: ============================================================= :: 智价云(药店版) - 生产环境启动脚本 :: 用法:start-prod.bat [start|stop|build] :: 依赖:JDK 17 :: ============================================================= title 智价云(药店版) - 生产环境 set APP_NAME=zhijiayun-pharmacy set JAR_NAME=zhijiayun-gateway-1.0.0.jar set PROJECT_DIR=%~dp0.. set DEPLOY_DIR=%~dp0 set JAR_PATH=%DEPLOY_DIR%%JAR_NAME% set LOG_DIR=%DEPLOY_DIR%logs :: JVM 参数(生产推荐配置) set JAVA_OPTS=-server -Xms512m -Xmx1g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%LOG_DIR%\heapdump.hprof -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 goto :show_help :: ============================================================ :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 到 deploy 目录... copy /Y "%PROJECT_DIR%\zhijiayun-gateway\target\%JAR_NAME%" "%DEPLOY_DIR%" > nul echo [INFO] 构建完成:%JAR_PATH% goto :eof :: ============================================================ :do_start :: 检查 JAR 是否存在 if not exist "%JAR_PATH%" ( echo [WARN] JAR 包不存在,自动执行构建... call :do_build ) :: 检查端口 netstat -ano | findstr ":8002 " | findstr "LISTENING" > nul 2>&1 if not errorlevel 1 ( echo [WARN] 端口 8002 已被占用 netstat -ano | findstr ":8002 " | findstr "LISTENING" pause exit /b 1 ) if not exist "%LOG_DIR%" mkdir "%LOG_DIR%" echo. echo ================================================================ echo %APP_NAME% - 生产环境 echo JAR: %JAR_PATH% echo 日志: %LOG_DIR% echo 端口: 8002 echo Profile: prod echo ================================================================ echo. :: 加载 .env 文件(如果存在) if exist "%DEPLOY_DIR%.env" ( echo [INFO] 加载环境变量: .env for /f "usebackq tokens=1,* delims==" %%A in ("%DEPLOY_DIR%.env") do ( set line=%%A if not "!line:~0,1!"=="#" ( if not "%%B"=="" set "%%A=%%B" ) ) ) java %JAVA_OPTS% ^ -jar "%JAR_PATH%" ^ --spring.profiles.active=prod goto :eof :: ============================================================ :do_stop echo [INFO] 查找并停止 %APP_NAME%... for /f "tokens=5" %%i in ('netstat -ano ^| findstr ":8002 " ^| findstr "LISTENING"') do ( echo [INFO] 终止进程 PID=%%i taskkill /PID %%i /F > nul 2>&1 ) echo [INFO] 应用已停止 goto :eof :: ============================================================ :show_help echo 用法: start-prod.bat [命令] echo. echo start 启动应用(默认) echo stop 停止应用 echo build Maven 打包并复制到 deploy 目录 echo. pause goto :eof