@echo off chcp 65001 >nul setlocal EnableDelayedExpansion :: ============================================================================= :: RuoYi-Vue-Plus 热启动脚本 (Windows版) :: 功能:启动应用并支持热加载、多环境切换等功能 :: 位置:backend/hot-start.bat :: 作者:zlwu :: 时间:2025-07-01 :: ============================================================================= :: 默认配置 set DEFAULT_PROFILE=dev set DEFAULT_PORT=8080 set DEFAULT_MODULE=ruoyi-admin set MAVEN_OPTS=-Xms512m -Xmx2048m -XX:+UseG1GC :: 脚本信息 set SCRIPT_NAME=RuoYi热启动脚本 set SCRIPT_VERSION=1.0.0 :: 参数初始化 set PROFILE=%DEFAULT_PROFILE% set PORT=%DEFAULT_PORT% set MODULE=%DEFAULT_MODULE% set CLEAN_BUILD=false set DEBUG_MODE=false set HOT_RELOAD=true set JVM_OPTS= set CHECK_ONLY=false :: 显示Logo :show_logo echo. echo ================================================================================== echo ____ __ ___ _ _ _ _ ____ _ _ echo ^| _ \ _ _ ___ ^| \/ ^(_^) ^| ^| ^| ^| ___ ^| ^|_ / ___^|^| ^|_ __ _ _ __^| ^|_ echo ^| ^|_^) ^| ^| ^| ^|/ _ \ ^| ^|\/^| ^| ^|_____^| ^|_^| ^|/ _ \^| __^| \___ \^| __/ _` ^| '__^| __^| echo ^| _ ^<^| ^|_^| ^| ^(_^) ^|^| ^| ^| ^| ^|_____^| _ ^| ^(_^) ^| ^|_ ___^) ^| ^|^| ^(_^| ^| ^| ^| ^|_ echo ^|_^| \_\\__,_^|\___/ ^|_^| ^|_^|_^| ^|_^| ^|_^|\___/ \__^| ^|____/ \__\__,_^|_^| \__^| echo. echo 🚀 %SCRIPT_NAME% v%SCRIPT_VERSION% 🚀 echo ================================================================================== echo. goto :eof :: 显示帮助信息 :show_help echo 用法: %~nx0 [选项] echo. echo 选项: echo -h, --help 显示此帮助信息 echo -p, --profile 指定环境配置 ^(dev/test/prod,默认: dev^) echo -P, --port 指定端口号 ^(默认: 8080^) echo -c, --clean 清理编译后启动 echo -d, --debug 启用调试模式 echo -t, --test 测试模式启动 echo --no-hot 禁用热加载功能 echo --check 检查环境配置 echo. echo 示例: echo %~nx0 # 使用默认配置启动^(开发环境+热加载^) echo %~nx0 -p prod # 生产环境启动 echo %~nx0 -P 9090 # 指定端口9090启动 echo %~nx0 -c # 清理编译后启动 echo %~nx0 -d # 调试模式启动 echo %~nx0 --no-hot # 禁用热加载启动 echo %~nx0 --check # 检查环境配置 echo. echo 🔥 热加载功能说明: echo - 开发环境默认启用热加载,修改代码后自动重启 echo - 支持Java代码、配置文件、MyBatis映射文件热加载 echo - 详细配置见: docs/开发文档/热加载配置说明.md goto :eof :: 检查环境 :check_environment echo 🔍 检查运行环境... :: 检查Java版本 java -version >nul 2>&1 if !errorlevel! neq 0 ( echo ❌ 未找到Java环境 exit /b 1 ) else ( for /f "tokens=3" %%a in ('java -version 2^>^&1 ^| findstr "version"') do ( set JAVA_VERSION=%%a set JAVA_VERSION=!JAVA_VERSION:"=! echo ✅ Java版本: !JAVA_VERSION! ) ) :: 检查Maven版本 mvn -version >nul 2>&1 if !errorlevel! neq 0 ( echo ❌ 未找到Maven环境 exit /b 1 ) else ( for /f "tokens=3" %%a in ('mvn -version 2^>nul ^| findstr "Apache Maven"') do ( echo ✅ Maven版本: %%a ) ) :: 检查目标模块 if exist "%DEFAULT_MODULE%" ( echo ✅ 目标模块: %DEFAULT_MODULE% ) else ( echo ❌ 未找到目标模块: %DEFAULT_MODULE% exit /b 1 ) :: 检查热加载配置 findstr /c:"spring-boot-devtools" "%DEFAULT_MODULE%\pom.xml" >nul 2>&1 if !errorlevel! equ 0 ( echo ✅ 热加载配置: 已启用 ) else ( echo ⚠️ 热加载配置: 未配置 ) :: 检查配置文件 if exist "%DEFAULT_MODULE%\src\main\resources\application-%DEFAULT_PROFILE%.yml" ( echo ✅ 配置文件: %DEFAULT_MODULE%\src\main\resources\application-%DEFAULT_PROFILE%.yml ) else ( echo ❌ 未找到配置文件: %DEFAULT_MODULE%\src\main\resources\application-%DEFAULT_PROFILE%.yml exit /b 1 ) echo ✅ 环境检查完成 exit /b 0 :: 检查端口占用 :check_port netstat -an | findstr ":%PORT% " >nul 2>&1 if !errorlevel! equ 0 ( echo ⚠️ 端口 %PORT% 已被占用 echo 正在尝试找到占用进程... for /f "tokens=5" %%a in ('netstat -ano ^| findstr ":%PORT% "') do ( set PID=%%a for /f "tokens=1" %%b in ('tasklist /fi "pid eq !PID!" /fo csv /nh') do ( set PROCESS_NAME=%%b set PROCESS_NAME=!PROCESS_NAME:"=! echo 进程: !PROCESS_NAME! ^(PID: !PID!^) ) ) echo. set /p REPLY="是否要杀死占用进程并继续启动? (y/n): " if /i "!REPLY!"=="y" ( echo 正在杀死端口 %PORT% 的占用进程... for /f "tokens=5" %%a in ('netstat -ano ^| findstr ":%PORT% "') do ( taskkill /pid %%a /f >nul 2>&1 ) timeout /t 2 /nobreak >nul echo ✅ 端口已释放 ) else ( echo ❌ 启动已取消 exit /b 1 ) ) exit /b 0 :: 清理编译 :clean_build echo 🧹 清理编译... cd /d "%DEFAULT_MODULE%" mvn clean >nul 2>&1 if !errorlevel! equ 0 ( echo ✅ 清理完成 ) else ( echo ❌ 清理失败 exit /b 1 ) cd .. exit /b 0 :: 构建项目 :build_project echo 🔨 编译项目... cd /d "%DEFAULT_MODULE%" mvn compile -q if !errorlevel! equ 0 ( echo ✅ 编译完成 ) else ( echo ❌ 编译失败 exit /b 1 ) cd .. exit /b 0 :: 启动应用 :start_application echo 🚀 启动应用... echo 配置信息: echo 📂 模块: %DEFAULT_MODULE% echo 🌍 环境: %PROFILE% echo 🔌 端口: %PORT% if "%HOT_RELOAD%"=="true" ( echo 🔥 热加载: 启用 ) else ( echo 🔥 热加载: 禁用 ) if "%DEBUG_MODE%"=="true" ( echo 🐛 调试模式: 启用 ) else ( echo 🐛 调试模式: 禁用 ) echo. cd /d "%DEFAULT_MODULE%" :: 构建Maven命令 set MVN_CMD=mvn spring-boot:run :: 添加环境配置 set MVN_CMD=%MVN_CMD% -Dspring-boot.run.profiles=%PROFILE% :: 添加端口配置 if not "%PORT%"=="%DEFAULT_PORT%" ( set MVN_CMD=%MVN_CMD% -Dspring-boot.run.arguments=--server.port=%PORT% ) :: 添加JVM参数 if not "%JVM_OPTS%"=="" ( set MVN_CMD=%MVN_CMD% -Dspring-boot.run.jvmArguments="%JVM_OPTS%" ) else ( set MVN_CMD=%MVN_CMD% -Dspring-boot.run.jvmArguments="%MAVEN_OPTS%" ) :: 调试模式 if "%DEBUG_MODE%"=="true" ( set MVN_CMD=%MVN_CMD% -Dspring-boot.run.jvmArguments="%MAVEN_OPTS% -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005" echo 🐛 调试端口: 5005 ) :: 禁用热加载 if "%HOT_RELOAD%"=="false" ( set MVN_CMD=%MVN_CMD% -Dspring.devtools.restart.enabled=false ) echo 执行命令: %MVN_CMD% echo ==================== 应用启动日志 ==================== echo. :: 执行命令 %MVN_CMD% exit /b 0 :: 参数解析 :parse_args if "%~1"=="" goto args_done if "%~1"=="-h" goto show_help_and_exit if "%~1"=="--help" goto show_help_and_exit if "%~1"=="-p" ( set PROFILE=%~2 shift shift goto parse_args ) if "%~1"=="--profile" ( set PROFILE=%~2 shift shift goto parse_args ) if "%~1"=="-P" ( set PORT=%~2 shift shift goto parse_args ) if "%~1"=="--port" ( set PORT=%~2 shift shift goto parse_args ) if "%~1"=="-c" ( set CLEAN_BUILD=true shift goto parse_args ) if "%~1"=="--clean" ( set CLEAN_BUILD=true shift goto parse_args ) if "%~1"=="-d" ( set DEBUG_MODE=true shift goto parse_args ) if "%~1"=="--debug" ( set DEBUG_MODE=true shift goto parse_args ) if "%~1"=="-t" ( set PROFILE=test shift goto parse_args ) if "%~1"=="--test" ( set PROFILE=test shift goto parse_args ) if "%~1"=="--no-hot" ( set HOT_RELOAD=false shift goto parse_args ) if "%~1"=="--check" ( set CHECK_ONLY=true shift goto parse_args ) echo 未知参数: %~1 call :show_help exit /b 1 :show_help_and_exit call :show_help exit /b 0 :args_done :: 主程序 :main :: 显示Logo call :show_logo :: 仅检查环境 if "%CHECK_ONLY%"=="true" ( call :check_environment exit /b !errorlevel! ) :: 环境检查 call :check_environment if !errorlevel! neq 0 ( echo ❌ 环境检查失败,请检查配置 exit /b 1 ) echo. :: 端口检查 call :check_port if !errorlevel! neq 0 exit /b 1 :: 清理编译 if "%CLEAN_BUILD%"=="true" ( call :clean_build if !errorlevel! neq 0 exit /b 1 echo. ) :: 编译项目 call :build_project if !errorlevel! neq 0 exit /b 1 echo. :: 启动应用 call :start_application exit /b 0 :: 解析参数并执行主程序 call :parse_args %* call :main