start-prod.bat 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. @echo off
  2. chcp 65001 > nul
  3. setlocal enabledelayedexpansion
  4. :: =============================================================
  5. :: 智价云药店系统 - 生产环境启动脚本
  6. :: 用法:start-prod.bat [start|stop|build]
  7. :: 依赖:JDK 17
  8. :: =============================================================
  9. title 智价云药店 - 生产环境
  10. set APP_NAME=zhijiayun-pharmacy
  11. set JAR_NAME=zhijiayun-gateway-1.0.0.jar
  12. set PROJECT_DIR=%~dp0..
  13. set DEPLOY_DIR=%~dp0
  14. set JAR_PATH=%DEPLOY_DIR%%JAR_NAME%
  15. set LOG_DIR=%DEPLOY_DIR%logs
  16. :: JVM 参数(生产推荐配置)
  17. 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
  18. set ACTION=%1
  19. if "%ACTION%"=="" set ACTION=start
  20. if "%ACTION%"=="start" goto :do_start
  21. if "%ACTION%"=="stop" goto :do_stop
  22. if "%ACTION%"=="build" goto :do_build
  23. goto :show_help
  24. :: ============================================================
  25. :do_build
  26. echo [INFO] Maven 打包(跳过测试)...
  27. cd /d "%PROJECT_DIR%"
  28. call mvn clean package -DskipTests -pl zhijiayun-gateway -am
  29. if errorlevel 1 (
  30. echo [ERROR] 构建失败
  31. pause
  32. exit /b 1
  33. )
  34. echo [INFO] 复制 JAR 到 deploy 目录...
  35. copy /Y "%PROJECT_DIR%\zhijiayun-gateway\target\%JAR_NAME%" "%DEPLOY_DIR%" > nul
  36. echo [INFO] 构建完成:%JAR_PATH%
  37. goto :eof
  38. :: ============================================================
  39. :do_start
  40. :: 检查 JAR 是否存在
  41. if not exist "%JAR_PATH%" (
  42. echo [WARN] JAR 包不存在,自动执行构建...
  43. call :do_build
  44. )
  45. :: 检查端口
  46. netstat -ano | findstr ":8002 " | findstr "LISTENING" > nul 2>&1
  47. if not errorlevel 1 (
  48. echo [WARN] 端口 8002 已被占用
  49. netstat -ano | findstr ":8002 " | findstr "LISTENING"
  50. pause
  51. exit /b 1
  52. )
  53. if not exist "%LOG_DIR%" mkdir "%LOG_DIR%"
  54. echo.
  55. echo ================================================================
  56. echo %APP_NAME% - 生产环境
  57. echo JAR: %JAR_PATH%
  58. echo 日志: %LOG_DIR%
  59. echo 端口: 8002
  60. echo Profile: prod
  61. echo ================================================================
  62. echo.
  63. :: 加载 .env 文件(如果存在)
  64. if exist "%DEPLOY_DIR%.env" (
  65. echo [INFO] 加载环境变量: .env
  66. for /f "usebackq tokens=1,* delims==" %%A in ("%DEPLOY_DIR%.env") do (
  67. set line=%%A
  68. if not "!line:~0,1!"=="#" (
  69. if not "%%B"=="" set "%%A=%%B"
  70. )
  71. )
  72. )
  73. java %JAVA_OPTS% ^
  74. -jar "%JAR_PATH%" ^
  75. --spring.profiles.active=prod
  76. goto :eof
  77. :: ============================================================
  78. :do_stop
  79. echo [INFO] 查找并停止 %APP_NAME%...
  80. for /f "tokens=5" %%i in ('netstat -ano ^| findstr ":8002 " ^| findstr "LISTENING"') do (
  81. echo [INFO] 终止进程 PID=%%i
  82. taskkill /PID %%i /F > nul 2>&1
  83. )
  84. echo [INFO] 应用已停止
  85. goto :eof
  86. :: ============================================================
  87. :show_help
  88. echo 用法: start-prod.bat [命令]
  89. echo.
  90. echo start 启动应用(默认)
  91. echo stop 停止应用
  92. echo build Maven 打包并复制到 deploy 目录
  93. echo.
  94. pause
  95. goto :eof