| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369 |
- @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
|