JavaProjectRepo/docs/TECHNICAL_PLAN.md
root 7de982d150 refactor: replace @Value(file-space.system) with @ConfigurationProperties
feat: add Actuator/Micrometer Prometheus and Springdoc defaults

build(app): fix MyBatis dependency convergence; relax enforcer for Maven 3.6.3

chore: add quartz.properties example and Dockerfile; remove duplicate websocket dep
2025-11-07 22:30:59 +08:00

143 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 项目技术方案说明
> 项目ProjectFrameWork2025模块`java/platform`
> 运行环境WindowsJava 21兼容 17+Spring Boot 3.x
## 1. 项目概述
- 平台型后端服务,基于 Spring Boot 构建,采用分环境配置(`dev`/`server`)。
- 数据访问使用 MyBatis-Plus + Druid 连接池,计划支持 Redis、定时任务Quartz并暴露 Swagger UI 便于接口联调。
- 支持 WAR 包运行(内嵌 Tomcat 或外部容器)。
## 2. 技术栈与版本
- 核心框架:`Spring Boot 3.x`
- ORM`MyBatis-Plus 3.5.6`
- MyBatis 核心:`3.5.16`(与 MP 3.5.6 兼容,解决 `parsePendingResultMaps(boolean)` 缺失)
- 数据源:`Druid`
- 任务调度:`Quartz 2.3.2`
- API 文档:`springdoc-openapi` 或 `Swagger UI`YAML 中 `swagger-ui.enabled: true`
- 日志:`Logback``logback-spring.xml`,统一 UTF-8 编码)
- 语言与 JDK推荐 `Java 17+`,当前运行 `Java 21.0.5`
## 3. 模块与目录结构
```
ProjectFrameWork2025/
├── .vscode/launch.json # VS Code 启动配置UTF-8 调试)
└── java/
├── pom.xml # Maven 构建与依赖管理
├── src/main/java # 业务代码入口com.yfd.platform.PlatformApplication
├── src/main/resources # 配置与静态资源
│ ├── application.yml # 通用配置(激活 profile
│ ├── application-dev.yml # 开发环境配置
│ ├── application-server.yml # 服务器环境配置
│ └── logback-spring.xml # 统一日志编码与输出格式
└── target/platform-1.0.war # 打包产物(可直接运行)
```
## 4. 配置管理策略
- Profile通过 `--spring.profiles.active=<dev|server>` 切换。
- 关键属性:
- `file-space.system`:文件空间根路径,必须在激活的 profile 中配置(已补充到 `application-server.yml`)。
- `spring.datasource.druid.*`数据库连接池配置URL/用户名/密码)。
- `server.port`:端口(`dev` 默认 8093`server` 默认 8090
- VS Code 与终端编码:
-`.vscode/launch.json` 中设置:
- `vmArgs: -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8`
- `env.JAVA_TOOL_OPTIONS``env.JDK_JAVA_OPTIONS` 设为 UTF-8
- `console: integratedTerminal`
- 终端运行前执行:`chcp 65001`,并确保 PowerShell 输出编码为 UTF-8
## 5. 数据库与数据源
- MySQL 连接示例:
```yaml
spring:
datasource:
druid:
master:
url: jdbc:mysql://<host>:3306/<db>?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&useSSL=false&allowPublicKeyRetrieval=true
username: <user>
password: <password>
```
- 远程访问与授权建议:
- 为应用账户授权外部访问:
```sql
CREATE USER 'appuser'@'%' IDENTIFIED BY 'StrongPassword!';
GRANT ALL PRIVILEGES ON <db>.* TO 'appuser'@'%';
FLUSH PRIVILEGES;
```
- 确保 MySQL `bind-address` 放开远程,防火墙/安全组放行 `3306`
- Druid 健壮性配置建议(数据库未就绪时减少报错):
```yaml
spring:
datasource:
druid:
initial-size: 0
test-on-borrow: false
test-while-idle: true
validation-query: SELECT 1
```
## 6. ORM 与持久化
- DAO 层使用 MyBatis-Plus简化 CRUDMapper XML 与注解可共存。
- 版本兼容性已确认:`MP 3.5.6` 依赖 `MyBatis 3.5.16+``Configuration.parsePendingResultMaps(boolean)`
- 如遇 `NoSuchMethodError`,优先检查 `pom.xml` 中 MyBatis 版本与依赖冲突。
## 7. 日志方案
- 使用 `logback-spring.xml` 统一控制台与文件日志编码为 UTF-8
- 控制台:`ConsoleAppender` + `PatternLayoutEncoder``charset: UTF-8`
- 文件:`RollingFileAppender` 按日滚动,保留 30 天历史
- 日志格式:`%d [%thread] %-5level %logger{50} - %msg%n`
- 在 Windows 终端执行:`chcp 65001`,并设置 `JAVA_TOOL_OPTIONS` 保证 JVM 使用 UTF-8。
## 8. 定时任务
- Quartz 持久化策略当前为 `RAMJobStore`(非集群、内存存储)。
- 如需持久化与集群,可改为 `JdbcJobStore` 并配置数据源与表结构。
## 9. 安全与鉴权
- 采用 `JWT` 方案(存在 `jwtAuthenticationTokenFilter` 等 Bean通过过滤器进行请求鉴权。
- 建议:
- 将敏感配置(`jwt.secret`、数据库密码)置于环境变量或外部密钥管理。
- 开发环境使用弱密钥仅限本地,生产需强密钥并开启 HTTPS。
## 10. API 文档与联调
- 启用 Swagger UI`swagger-ui.enabled: true`)。
- 访问路径通常为:`/swagger-ui/index.html`(具体以 springdoc 配置为准)。
## 11. 构建与运行
- 构建:
```bash
mvn -f java/pom.xml clean package -DskipTests
```
- 启动dev
```bash
java -jar java/target/platform-1.0.war --spring.profiles.active=dev
```
- 启动server
```bash
java -jar java/target/platform-1.0.war --spring.profiles.active=server
```
- VS Code 调试:选择配置 `Spring Boot-PlatformApplication<platform>` 启动。
## 12. 常见问题与排错
- 控制台中文乱码:
- 终端执行 `chcp 65001`VS Code 配置 UTF-8`logback-spring.xml` 强制 UTF-8。
- MyBatis `NoSuchMethodError`
- 升级 MyBatis 至 `3.5.16+` 与 MP 版本匹配。
- 数据库 `Access denied`
- 校验账户密码与远程授权;必要时新建业务账户并放开 `3306`
- 占用端口/启动失败:
- 检查 `server.port` 与端口冲突;查看应用日志根因。
## 13. 运维与监控建议
- 接入 Spring Boot Actuator 暴露健康检查端点(`/actuator/health`)。
- 结合日志轮转与集中采集ELK/Vector按环境区分日志路径。
- 数据库连接与线程池指标纳入监控Druid/Quartz
## 14. 后续规划
- 增加 Redis 缓存与会话支持。
- Quartz 改为持久化存储以支持任务恢复与集群。
- 完善 CI/CD 流程,增加测试与安全检查。
- 引入统一配置中心(如 Nacos/Spring Cloud Config管理多环境配置。
---
如需针对该方案进行扩展(例如新增模块、接口规范或部署拓扑图),可在 `docs/` 下继续补充专题文档。