feat: 完善项目开发规范和测试文档体系

📝 主要改进:
• Cursor配置模块化:拆分为前端、后端、移动端、文档、API测试5个专门规范文件
• API文档重新组织:按业务模块拆分到docs/开发文档/API/目录下
• 新增维修分类功能完整测试方案和自动化测试脚本
• 后端热启动脚本完善,支持Linux/Windows双平台
• 强化文档同步更新规范,确保代码与文档一致性

🔧 技术改进:
• 优化Cursor AI工作流程和代码生成质量
• 完善API测试规范(AES+RSA双重加密登录方法)
• 提升开发效率和代码质量标准化程度

�� 测试覆盖:
• 维修分类管理功能端到端测试验证通过
• 包含页面加载、CRUD操作、搜索功能等核心测试用例

更新时间:2025-07-01
This commit is contained in:
zlwu committed 2025-07-01 17:53:05 +08:00
1 parent 7a5b9d1bea
commit 249b1dfeb4
44 files changed
+14027 -2852

No files matched your search

+319
View File
@@ -0,0 +1,319 @@
# RuoYi 热启动脚本使用说明
## 📋 脚本概述
**脚本名称**:
- Linux/macOS: `hot-start.sh`
- Windows: `hot-start.bat`
**脚本位置**: `backend/` 目录
**创建时间**: 2025-07-01 12:05:32
**脚本版本**: v1.0.0
**功能说明**: 为 RuoYi-Vue-Plus 项目提供智能热启动功能,支持多环境切换、热加载、调试模式等
### 跨平台支持
- 🐧 **Linux/macOS**: 使用 `hot-start.sh` (Bash 脚本)
- 🪟 **Windows**: 使用 `hot-start.bat` (批处理脚本)
- 🔄 **功能一致**: 两个脚本提供完全相同的功能和参数
## 🚀 快速开始
### 基本使用
#### Linux/macOS
```bash
# 进入backend目录
cd backend
# 默认启动(开发环境 + 热加载)
./hot-start.sh
# 查看帮助信息
./hot-start.sh --help
# 检查环境配置
./hot-start.sh --check
```
#### Windows
```cmd
# 进入backend目录
cd backend
# 默认启动(开发环境 + 热加载)
hot-start.bat
# 查看帮助信息
hot-start.bat --help
# 检查环境配置
hot-start.bat --check
```
### 常用启动命令
#### Linux/macOS
```bash
# 开发环境启动(默认)
./hot-start.sh
# 清理编译后启动
./hot-start.sh -c
# 调试模式启动
./hot-start.sh -d
# 生产环境启动
./hot-start.sh -p prod
# 指定端口启动
./hot-start.sh -P 9090
# 禁用热加载启动
./hot-start.sh --no-hot
```
#### Windows
```cmd
# 开发环境启动(默认)
hot-start.bat
# 清理编译后启动
hot-start.bat -c
# 调试模式启动
hot-start.bat -d
# 生产环境启动
hot-start.bat -p prod
# 指定端口启动
hot-start.bat -P 9090
# 禁用热加载启动
hot-start.bat --no-hot
```
## 🔧 功能特性
### 1. 智能环境检查
- ✅ 自动检查 Java 环境
- ✅ 自动检查 Maven 环境
- ✅ 验证目标模块存在
- ✅ 检查热加载配置状态
- ✅ 验证配置文件完整性
### 2. 热加载支持
- 🔥 **默认启用**: 开发环境自动启用热加载功能
- 🔥 **智能重启**: 修改 Java 代码后 1-3 秒自动重启
- 🔥 **配置热加载**: 支持配置文件变更实时生效
- 🔥 **MyBatis 支持**: XML 映射文件修改自动重新加载
### 3. 多环境支持
- 🌍 **开发环境**: `-p dev` (默认)
- 🌍 **测试环境**: `-p test` 或 `-t`
- 🌍 **生产环境**: `-p prod`
### 4. 高级功能
- 🐛 **调试模式**: `-d` 启用远程调试(端口 5005)
- 🧹 **清理编译**: `-c` 清理后重新编译启动
- 🔌 **端口管理**: 自动检测端口占用并提供解决方案
- ⚙️ **JVM 调优**: 内置 G1GC 优化参数
## 📚 参数详解
### 命令行选项
| 选项 | 长选项 | 说明 | 示例 |
| ---- | ------------ | --------------- | ------------------------------- |
| `-h` | `--help` | 显示帮助信息 | `./hot-start.sh -h` |
| `-p` | `--profile` | 指定环境配置 | `./hot-start.sh -p prod` |
| `-P` | `--port` | 指定端口号 | `./hot-start.sh -P 9090` |
| `-m` | `--module` | 指定启动模块 | `./hot-start.sh -m ruoyi-admin` |
| `-c` | `--clean` | 清理编译后启动 | `./hot-start.sh -c` |
| `-d` | `--debug` | 启用调试模式 | `./hot-start.sh -d` |
| `-j` | `--jvm-opts` | 自定义 JVM 参数 | `./hot-start.sh -j "-Xmx4g"` |
| `-t` | `--test` | 测试模式启动 | `./hot-start.sh -t` |
| | `--no-hot` | 禁用热加载功能 | `./hot-start.sh --no-hot` |
| | `--check` | 检查环境配置 | `./hot-start.sh --check` |
### 环境配置说明
| 环境 | 配置文件 | 适用场景 | 热加载 |
| ------ | ---------------------- | -------- | ------- |
| `dev` | `application-dev.yml` | 开发调试 | ✅ 启用 |
| `test` | `application-test.yml` | 测试验证 | ❌ 禁用 |
| `prod` | `application-prod.yml` | 生产部署 | ❌ 禁用 |
## 🎯 使用场景
### 日常开发
```bash
# 1. 开始开发
./hot-start.sh
# 2. 修改代码后,应用自动重启(1-3秒)
# 3. 继续开发,享受热加载带来的效率提升
```
### 问题调试
```bash
# 启用调试模式(远程调试端口:5005)
./hot-start.sh -d
# IDE中配置远程调试连接 localhost:5005
```
### 环境切换
```bash
# 测试环境验证
./hot-start.sh -t
# 生产环境模拟
./hot-start.sh -p prod --no-hot
```
### 清理重启
```bash
# 彻底清理后启动(解决依赖问题)
./hot-start.sh -c
```
## 🔍 故障排除
### 常见问题
#### 1. 端口占用
**现象**: 提示端口已被占用
**解决**: 脚本会自动检测并询问是否杀死占用进程
#### 2. 热加载不工作
**现象**: 修改代码后不自动重启
**解决**:
```bash
# 检查热加载配置
./hot-start.sh --check
# 如果配置正确,检查IDE自动编译设置
```
#### 3. 编译失败
**现象**: 启动时编译报错
**解决**:
```bash
# 清理后重新编译
./hot-start.sh -c
```
#### 4. Java/Maven 环境问题
**现象**: 环境检查失败
**解决**:
```bash
# 检查环境配置
./hot-start.sh --check
# 确保Java 17+和Maven 3.6+已正确安装
java -version
mvn -version
```
### 调试技巧
#### 1. 查看详细日志
脚本会显示完整的 Maven 启动命令,可以手动执行进行调试:
```bash
# 脚本会显示类似这样的命令
mvn spring-boot:run -Dspring-boot.run.profiles=dev -Dspring-boot.run.jvmArguments="-Xms512m -Xmx2048m -XX:+UseG1GC"
```
#### 2. 临时禁用热加载
如果怀疑热加载引起问题:
```bash
./hot-start.sh --no-hot
```
#### 3. 自定义 JVM 参数
针对特定问题调整 JVM 参数:
```bash
./hot-start.sh -j "-Xmx4g -XX:+HeapDumpOnOutOfMemoryError"
```
## 🎨 脚本特色
### 美观的界面
- 🎨 彩色输出提升用户体验
- 🚀 精美的启动 Logo
- 📊 清晰的配置信息展示
- ✅ 直观的状态指示器
### 智能化特性
- 🧠 自动环境检测
- 🔧 智能端口管理
- 📋 详细的错误提示
- 🛡️ 优雅的异常处理
### 开发友好
- ⚡ 一键启动,无需记忆复杂命令
- 🔄 支持中断恢复(Ctrl+C)
- 📚 内置帮助文档
- 🎯 针对不同场景的预设选项
## 📝 配置文件关联
脚本与以下配置文件关联:
- **pom.xml**: 检查 DevTools 依赖
- **application-dev.yml**: 开发环境配置(含热加载配置)
- **application-test.yml**: 测试环境配置
- **application-prod.yml**: 生产环境配置
## 🔗 相关文档
- **热加载配置详解**: `docs/开发文档/热加载配置说明.md`
- **项目启动指南**: `工程本地启动指导.md`
- **变更记录**: `docs/变更管理/code-adjust-record-2025-07-01-zlwu.md`
## 📞 技术支持
如果在使用过程中遇到问题:
1. **查看帮助**: `./hot-start.sh --help`
2. **环境检查**: `./hot-start.sh --check`
3. **查阅文档**: `docs/开发文档/热加载配置说明.md`
4. **问题反馈**: 查看变更记录文档中的联系方式
---
**🎉 享受热启动带来的开发效率提升!**
**📝 温馨提示**: 热加载功能仅在开发环境启用,生产环境会自动禁用以确保性能和稳定性。
+369
View File
@@ -0,0 +1,369 @@
@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
+336
View File
@@ -0,0 +1,336 @@
#!/bin/bash
# =============================================================================
# RuoYi-Vue-Plus 热启动脚本
# 功能:启动应用并支持热加载、多环境切换等功能
# 位置:backend/hot-start.sh
# 作者:zlwu
# 时间:2025-07-01
# =============================================================================
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
WHITE='\033[1;37m'
NC='\033[0m' # No Color
# 默认配置
DEFAULT_PROFILE="dev"
DEFAULT_PORT="8080"
DEFAULT_MODULE="ruoyi-admin"
MAVEN_OPTS="-Xms512m -Xmx2048m -XX:+UseG1GC"
# 脚本信息
SCRIPT_NAME="RuoYi热启动脚本"
SCRIPT_VERSION="1.0.0"
# 显示Logo
show_logo() {
echo -e "${CYAN}"
echo "==================================================================================="
echo " ____ __ ___ _ _ _ _ ____ _ _ "
echo " | _ \ _ _ ___ | \/ (_) | | | | ___ | |_ / ___|| |_ __ _ _ __| |_ "
echo " | |_) | | | |/ _ \ | |\/| | |_____| |_| |/ _ \| __| \___ \| __/ _\` | '__| __| "
echo " | _ <| |_| | (_) || | | | |_____| _ | (_) | |_ ___) | || (_| | | | |_ "
echo " |_| \_\\\\__,_|\___/ |_| |_|_| |_| |_|\___/ \__| |____/ \__\__,_|_| \__| "
echo ""
echo " 🚀 ${SCRIPT_NAME} v${SCRIPT_VERSION} 🚀"
echo "==================================================================================="
echo -e "${NC}"
}
# 显示帮助信息
show_help() {
echo -e "${WHITE}用法: $0 [选项]${NC}"
echo ""
echo -e "${YELLOW}选项:${NC}"
echo -e " ${GREEN}-h, --help${NC} 显示此帮助信息"
echo -e " ${GREEN}-p, --profile${NC} 指定环境配置 (dev/test/prod,默认: dev)"
echo -e " ${GREEN}-P, --port${NC} 指定端口号 (默认: 8080)"
echo -e " ${GREEN}-m, --module${NC} 指定启动模块 (默认: ruoyi-admin)"
echo -e " ${GREEN}-c, --clean${NC} 清理编译后启动"
echo -e " ${GREEN}-d, --debug${NC} 启用调试模式"
echo -e " ${GREEN}-j, --jvm-opts${NC} 自定义JVM参数"
echo -e " ${GREEN}-t, --test${NC} 测试模式启动"
echo -e " ${GREEN}--no-hot${NC} 禁用热加载功能"
echo -e " ${GREEN}--check${NC} 检查环境配置"
echo ""
echo -e "${YELLOW}示例:${NC}"
echo -e " $0 # 使用默认配置启动(开发环境+热加载)"
echo -e " $0 -p prod # 生产环境启动"
echo -e " $0 -P 9090 # 指定端口9090启动"
echo -e " $0 -c # 清理编译后启动"
echo -e " $0 -d # 调试模式启动"
echo -e " $0 --no-hot # 禁用热加载启动"
echo -e " $0 --check # 检查环境配置"
echo ""
echo -e "${CYAN}🔥 热加载功能说明:${NC}"
echo -e " - 开发环境默认启用热加载,修改代码后自动重启"
echo -e " - 支持Java代码、配置文件、MyBatis映射文件热加载"
echo -e " - 详细配置见: docs/开发文档/热加载配置说明.md"
}
# 检查环境
check_environment() {
echo -e "${BLUE}🔍 检查运行环境...${NC}"
# 检查Java版本
if command -v java &> /dev/null; then
JAVA_VERSION=$(java -version 2>&1 | head -n 1 | cut -d'"' -f2)
echo -e " ✅ Java版本: ${GREEN}$JAVA_VERSION${NC}"
else
echo -e " ❌ ${RED}未找到Java环境${NC}"
return 1
fi
# 检查Maven版本
if command -v mvn &> /dev/null; then
MVN_VERSION=$(mvn -version 2>/dev/null | head -n 1 | cut -d' ' -f3)
echo -e " ✅ Maven版本: ${GREEN}$MVN_VERSION${NC}"
else
echo -e " ❌ ${RED}未找到Maven环境${NC}"
return 1
fi
# 检查目标模块
if [ -d "$DEFAULT_MODULE" ]; then
echo -e " ✅ 目标模块: ${GREEN}$DEFAULT_MODULE${NC}"
else
echo -e " ❌ ${RED}未找到目标模块: $DEFAULT_MODULE${NC}"
return 1
fi
# 检查热加载配置
if grep -q "spring-boot-devtools" $DEFAULT_MODULE/pom.xml; then
echo -e " ✅ 热加载配置: ${GREEN}已启用${NC}"
else
echo -e " ⚠️ 热加载配置: ${YELLOW}未配置${NC}"
fi
# 检查配置文件
CONFIG_FILE="$DEFAULT_MODULE/src/main/resources/application-$DEFAULT_PROFILE.yml"
if [ -f "$CONFIG_FILE" ]; then
echo -e " ✅ 配置文件: ${GREEN}$CONFIG_FILE${NC}"
else
echo -e " ❌ ${RED}未找到配置文件: $CONFIG_FILE${NC}"
return 1
fi
echo -e "${GREEN}✅ 环境检查完成${NC}"
return 0
}
# 检查端口占用
check_port() {
local port=$1
if lsof -Pi :$port -sTCP:LISTEN -t >/dev/null 2>&1; then
echo -e "${YELLOW}⚠️ 端口 $port 已被占用${NC}"
echo -e "${CYAN}正在尝试找到占用进程...${NC}"
lsof -Pi :$port -sTCP:LISTEN
echo ""
read -p "是否要杀死占用进程并继续启动? (y/n): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo -e "${YELLOW}正在杀死端口 $port 的占用进程...${NC}"
lsof -ti:$port | xargs kill -9 2>/dev/null
sleep 2
echo -e "${GREEN}✅ 端口已释放${NC}"
return 0
else
echo -e "${RED}❌ 启动已取消${NC}"
exit 1
fi
fi
return 0
}
# 清理编译
clean_build() {
echo -e "${BLUE}🧹 清理编译...${NC}"
cd $DEFAULT_MODULE
mvn clean > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo -e "${GREEN}✅ 清理完成${NC}"
else
echo -e "${RED}❌ 清理失败${NC}"
exit 1
fi
cd ..
}
# 构建项目
build_project() {
echo -e "${BLUE}🔨 编译项目...${NC}"
cd $DEFAULT_MODULE
mvn compile -q
if [ $? -eq 0 ]; then
echo -e "${GREEN}✅ 编译完成${NC}"
else
echo -e "${RED}❌ 编译失败${NC}"
exit 1
fi
cd ..
}
# 启动应用
start_application() {
local profile=$1
local port=$2
local debug_mode=$3
local hot_reload=$4
local jvm_opts=$5
echo -e "${BLUE}🚀 启动应用...${NC}"
echo -e "${CYAN}配置信息:${NC}"
echo -e " 📂 模块: ${GREEN}$DEFAULT_MODULE${NC}"
echo -e " 🌍 环境: ${GREEN}$profile${NC}"
echo -e " 🔌 端口: ${GREEN}$port${NC}"
echo -e " 🔥 热加载: ${GREEN}$([ "$hot_reload" = "true" ] && echo "启用" || echo "禁用")${NC}"
echo -e " 🐛 调试模式: ${GREEN}$([ "$debug_mode" = "true" ] && echo "启用" || echo "禁用")${NC}"
echo ""
cd $DEFAULT_MODULE
# 构建Maven命令
MVN_CMD="mvn spring-boot:run"
# 添加环境配置
MVN_CMD="$MVN_CMD -Dspring-boot.run.profiles=$profile"
# 添加端口配置
if [ "$port" != "$DEFAULT_PORT" ]; then
MVN_CMD="$MVN_CMD -Dspring-boot.run.arguments=--server.port=$port"
fi
# 添加JVM参数
if [ -n "$jvm_opts" ]; then
MVN_CMD="$MVN_CMD -Dspring-boot.run.jvmArguments=\"$jvm_opts\""
else
MVN_CMD="$MVN_CMD -Dspring-boot.run.jvmArguments=\"$MAVEN_OPTS\""
fi
# 调试模式
if [ "$debug_mode" = "true" ]; then
MVN_CMD="$MVN_CMD -Dspring-boot.run.jvmArguments=\"$MAVEN_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005\""
echo -e "${PURPLE}🐛 调试端口: 5005${NC}"
fi
# 禁用热加载
if [ "$hot_reload" = "false" ]; then
MVN_CMD="$MVN_CMD -Dspring.devtools.restart.enabled=false"
fi
echo -e "${CYAN}执行命令: ${WHITE}$MVN_CMD${NC}"
echo -e "${GREEN}==================== 应用启动日志 ====================${NC}"
echo ""
# 执行命令
eval $MVN_CMD
}
# 主函数
main() {
# 参数解析
PROFILE="$DEFAULT_PROFILE"
PORT="$DEFAULT_PORT"
MODULE="$DEFAULT_MODULE"
CLEAN_BUILD=false
DEBUG_MODE=false
HOT_RELOAD=true
JVM_OPTS=""
CHECK_ONLY=false
while [[ $# -gt 0 ]]; do
case $1 in
-h|--help)
show_help
exit 0
;;
-p|--profile)
PROFILE="$2"
shift 2
;;
-P|--port)
PORT="$2"
shift 2
;;
-m|--module)
MODULE="$2"
DEFAULT_MODULE="$2"
shift 2
;;
-c|--clean)
CLEAN_BUILD=true
shift
;;
-d|--debug)
DEBUG_MODE=true
shift
;;
-j|--jvm-opts)
JVM_OPTS="$2"
shift 2
;;
-t|--test)
PROFILE="test"
shift
;;
--no-hot)
HOT_RELOAD=false
shift
;;
--check)
CHECK_ONLY=true
shift
;;
*)
echo -e "${RED}未知参数: $1${NC}"
show_help
exit 1
;;
esac
done
# 显示Logo
show_logo
# 仅检查环境
if [ "$CHECK_ONLY" = "true" ]; then
check_environment
exit $?
fi
# 环境检查
if ! check_environment; then
echo -e "${RED}❌ 环境检查失败,请检查配置${NC}"
exit 1
fi
echo ""
# 端口检查
check_port $PORT
# 清理编译
if [ "$CLEAN_BUILD" = "true" ]; then
clean_build
echo ""
fi
# 编译项目
build_project
echo ""
# 启动应用
start_application "$PROFILE" "$PORT" "$DEBUG_MODE" "$HOT_RELOAD" "$JVM_OPTS"
}
# 错误处理
trap 'echo -e "\n${YELLOW}⚠️ 应用启动已中断${NC}"; exit 1' INT TERM
# 执行主函数
main "$@"
+40 -33
View File
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ruoyi-vue-plus</artifactId>
<groupId>org.dromara</groupId>
@@ -23,27 +22,27 @@
<artifactId>mysql-connector-j</artifactId>
</dependency>
<!-- &lt;!&ndash; mp支持的数据库均支持 只需要增加对应的jdbc依赖即可 &ndash;&gt;-->
<!-- &lt;!&ndash; Oracle &ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>com.oracle.database.jdbc</groupId>-->
<!-- <artifactId>ojdbc8</artifactId>-->
<!-- </dependency>-->
<!-- &lt;!&ndash; 兼容oracle低版本 &ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>com.oracle.database.nls</groupId>-->
<!-- <artifactId>orai18n</artifactId>-->
<!-- </dependency>-->
<!-- &lt;!&ndash; PostgreSql &ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>org.postgresql</groupId>-->
<!-- <artifactId>postgresql</artifactId>-->
<!-- </dependency>-->
<!-- &lt;!&ndash; SqlServer &ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>com.microsoft.sqlserver</groupId>-->
<!-- <artifactId>mssql-jdbc</artifactId>-->
<!-- </dependency>-->
<!-- &lt;!&ndash; mp支持的数据库均支持 只需要增加对应的jdbc依赖即可 &ndash;&gt;-->
<!-- &lt;!&ndash; Oracle &ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>com.oracle.database.jdbc</groupId>-->
<!-- <artifactId>ojdbc8</artifactId>-->
<!-- </dependency>-->
<!-- &lt;!&ndash; 兼容oracle低版本 &ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>com.oracle.database.nls</groupId>-->
<!-- <artifactId>orai18n</artifactId>-->
<!-- </dependency>-->
<!-- &lt;!&ndash; PostgreSql &ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>org.postgresql</groupId>-->
<!-- <artifactId>postgresql</artifactId>-->
<!-- </dependency>-->
<!-- &lt;!&ndash; SqlServer &ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>com.microsoft.sqlserver</groupId>-->
<!-- <artifactId>mssql-jdbc</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>org.dromara</groupId>
@@ -104,17 +103,25 @@
<scope>test</scope>
</dependency>
<!-- Spring Boot DevTools 热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>runtime</scope>
</dependency>
<!-- skywalking 整合 logback -->
<!-- <dependency>-->
<!-- <groupId>org.apache.skywalking</groupId>-->
<!-- <artifactId>apm-toolkit-logback-1.x</artifactId>-->
<!-- <version>${与你的agent探针版本保持一致}</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.skywalking</groupId>-->
<!-- <artifactId>apm-toolkit-trace</artifactId>-->
<!-- <version>${与你的agent探针版本保持一致}</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.skywalking</groupId>-->
<!-- <artifactId>apm-toolkit-logback-1.x</artifactId>-->
<!-- <version>${与你的agent探针版本保持一致}</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.skywalking</groupId>-->
<!-- <artifactId>apm-toolkit-trace</artifactId>-->
<!-- <version>${与你的agent探针版本保持一致}</version>-->
<!-- </dependency>-->
</dependencies>
@@ -30,6 +30,29 @@ snail-job:
# RPC类型: netty, grpc
rpc-type: grpc
--- # 开发工具配置
spring:
# DevTools热部署配置
devtools:
restart:
# 启用热重启
enabled: true
# 排除不需要重启的资源
exclude: "static/**,public/**,templates/**,**/*Test.class,**/*Tests.class"
# 额外的监控路径
additional-paths: "src/main/java"
# 监控排除路径
additional-exclude: "**/*.properties"
# 重启触发文件 - 当此文件改动时触发重启
trigger-file: ".reloadtrigger"
# 启用热重启日志
log-condition-evaluation-delta: false
livereload:
# 启用LiveReload,需要浏览器插件支持
enabled: true
# LiveReload端口
port: 35729
--- # 数据源配置
spring:
datasource:
@@ -1,4 +1,6 @@
# 开发环境配置
# 注意:本项目已配置Spring Boot DevTools热加载功能
# 开发时修改Java代码后会自动重启,详见:docs/开发文档/热加载配置说明.md
server:
# 服务器的HTTP端口,默认为8080
port: 8080