feat: 完成情绪博物馆项目重构和功能增强 - 新增日记评论和帖子功能 - 重构前端架构,优化用户体验 - 完善WebSocket通信机制 - 更新项目文档和部署配置
This commit is contained in:
@@ -0,0 +1,397 @@
|
||||
# SpringBoot单体后端服务技术方案
|
||||
|
||||
## 1. 技术选型
|
||||
|
||||
### 1.1 核心框架
|
||||
- **Spring Boot**: 3.2.0 (最新稳定版本)
|
||||
- **Java版本**: JDK 21 (LTS版本)
|
||||
- **Spring AI**: 0.8.0 (最新稳定版本)
|
||||
- **WebSocket**: Spring WebSocket 6.1.0
|
||||
|
||||
### 1.2 数据存储
|
||||
- **数据库**: MySQL 8.0+
|
||||
- **缓存**: Redis 7.0+
|
||||
- **ORM框架**: MyBatis-Plus 3.5.4 (最新稳定版本)
|
||||
|
||||
### 1.3 其他组件
|
||||
- **连接池**: HikariCP (Spring Boot默认)
|
||||
- **JSON处理**: Jackson
|
||||
- **API文档**: SpringDoc OpenAPI 3
|
||||
- **安全框架**: Spring Security 6.1.0
|
||||
- **日志**: Log4j2 + SLF4J
|
||||
- **测试**: JUnit 5 + Mockito
|
||||
|
||||
## 2. 项目架构设计
|
||||
|
||||
### 2.1 分层架构
|
||||
```
|
||||
src/main/java/com/emotionmuseum/
|
||||
├── config/ # 配置类
|
||||
├── controller/ # 控制器层(只负责接收请求、参数校验、调用Service、返回结果)
|
||||
├── service/ # 服务层(所有业务逻辑都在这里实现)
|
||||
│ ├── impl/ # 服务实现
|
||||
├── mapper/ # 数据访问层
|
||||
├── entity/ # 实体类
|
||||
├── dto/ # 数据传输对象
|
||||
│ ├── request/ # 请求对象
|
||||
│ ├── response/ # 响应对象
|
||||
├── common/ # 公共组件
|
||||
│ ├── base/ # 基础类
|
||||
│ ├── exception/ # 异常处理
|
||||
│ ├── result/ # 统一返回结果
|
||||
│ ├── util/ # 工具类
|
||||
├── websocket/ # WebSocket相关
|
||||
└── EmotionMuseumApplication.java
|
||||
```
|
||||
|
||||
### 2.2 分层职责规范
|
||||
- **Controller层**: 只负责接收HTTP请求、参数校验、调用Service层方法、返回HTTP响应
|
||||
- **Service层**: 负责所有业务逻辑,包括数据校验、业务规则判断、数据处理、事务管理
|
||||
- **Mapper层**: 只负责数据库操作,不包含业务逻辑
|
||||
- **Entity层**: 数据库实体类,对应数据库表结构
|
||||
- **DTO层**: 数据传输对象,用于前后端数据交互
|
||||
|
||||
### 2.3 包结构规范
|
||||
- 按功能模块分包
|
||||
- 每个模块包含完整的MVC层次
|
||||
- 公共组件独立包管理
|
||||
|
||||
## 3. 核心配置设计
|
||||
|
||||
### 3.1 多环境配置
|
||||
- `application.yml` - 主配置文件
|
||||
- `application-dev.yml` - 开发环境
|
||||
- `application-test.yml` - 测试环境
|
||||
- `application-prod.yml` - 生产环境
|
||||
|
||||
### 3.2 异步配置
|
||||
- 使用`@EnableAsync`启用异步
|
||||
- 配置自定义线程池
|
||||
- 支持异步方法调用
|
||||
|
||||
### 3.3 数据库配置
|
||||
- 主从分离支持
|
||||
- 连接池优化配置
|
||||
- 事务管理配置
|
||||
|
||||
## 4. 代码规范
|
||||
|
||||
### 4.1 命名规范
|
||||
- **类名**: 大驼峰命名法 (PascalCase)
|
||||
- **方法名**: 小驼峰命名法 (camelCase)
|
||||
- **常量**: 全大写+下划线 (UPPER_SNAKE_CASE)
|
||||
- **包名**: 全小写+点分隔 (com.emotionmuseum)
|
||||
|
||||
### 4.2 注解规范
|
||||
- 控制器类使用`@RestController`
|
||||
- 服务类使用`@Service`
|
||||
- 数据访问类使用`@Mapper`
|
||||
- 异步方法使用`@Async`
|
||||
|
||||
### 4.3 异常处理规范
|
||||
- 统一使用全局异常处理器
|
||||
- 自定义业务异常类
|
||||
- 异常信息国际化支持
|
||||
|
||||
## 5. 核心组件设计
|
||||
|
||||
### 5.1 BaseEntity设计
|
||||
```java
|
||||
@MappedSuperclass
|
||||
@Data
|
||||
public abstract class BaseEntity {
|
||||
@TableId(type = IdType.ASSIGN_ID)
|
||||
private Long id;
|
||||
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private String createBy;
|
||||
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private String updateBy;
|
||||
|
||||
@TableLogic
|
||||
private Integer deleted;
|
||||
}
|
||||
```
|
||||
|
||||
### 5.2 统一返回结果设计
|
||||
```java
|
||||
@Data
|
||||
public class Result<T> {
|
||||
private Integer code;
|
||||
private String message;
|
||||
private T data;
|
||||
private Long timestamp;
|
||||
|
||||
public static <T> Result<T> success(T data) {
|
||||
// 成功返回
|
||||
}
|
||||
|
||||
public static <T> Result<T> error(String message) {
|
||||
// 错误返回
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 5.3 请求响应封装
|
||||
- 所有Controller入参使用Request对象封装
|
||||
- 所有Controller出参使用Response对象封装
|
||||
- 统一使用Result包装返回结果
|
||||
|
||||
### 5.4 分层职责严格规范
|
||||
**重要原则:严格遵循分层架构,各层职责明确,禁止跨层调用。**
|
||||
|
||||
- **Controller层职责**:
|
||||
- 接收HTTP请求
|
||||
- 参数校验(使用@Valid注解)
|
||||
- 调用Service层方法
|
||||
- 返回HTTP响应
|
||||
- **严禁在Controller层编写任何业务逻辑代码**
|
||||
|
||||
- **Service层职责**:
|
||||
- 所有业务逻辑实现
|
||||
- 数据校验和业务规则判断
|
||||
- 数据处理和转换
|
||||
- 事务管理
|
||||
- 调用Mapper层进行数据操作
|
||||
- 异常处理和日志记录
|
||||
|
||||
- **Mapper层职责**:
|
||||
- 数据库CRUD操作
|
||||
- SQL语句编写
|
||||
- 数据查询和映射
|
||||
- **严禁在Mapper层编写业务逻辑**
|
||||
|
||||
## 6. Spring AI + Coze集成方案
|
||||
|
||||
### 6.1 Coze平台集成
|
||||
- 使用Spring AI的ChatClient接口
|
||||
- 配置Coze API密钥和端点
|
||||
- 实现自定义ChatClient适配器
|
||||
|
||||
### 6.2 WebSocket实时通信
|
||||
- 使用STOMP协议
|
||||
- 支持一对一和广播消息
|
||||
- 实现消息持久化
|
||||
|
||||
### 6.3 对话管理
|
||||
- 对话历史记录存储
|
||||
- 上下文管理
|
||||
- 用户会话隔离
|
||||
|
||||
## 7. 缓存策略
|
||||
|
||||
### 7.1 Redis缓存设计
|
||||
- 用户会话缓存
|
||||
- 对话历史缓存
|
||||
- 热点数据缓存
|
||||
- 分布式锁实现
|
||||
|
||||
### 7.2 缓存更新策略
|
||||
- 写入时更新
|
||||
- 定时刷新
|
||||
- 失效策略
|
||||
|
||||
## 8. 安全设计
|
||||
|
||||
### 8.1 Spring Security认证授权
|
||||
- **JWT Token认证**: 基于JWT的无状态认证机制
|
||||
- **角色权限控制**: 基于RBAC的权限模型
|
||||
- **API访问控制**: 细粒度的接口权限控制
|
||||
- **密码加密**: 使用BCrypt加密算法
|
||||
- **会话管理**: 支持无状态和有状态会话
|
||||
- **CSRF防护**: 跨站请求伪造防护
|
||||
- **CORS配置**: 跨域资源共享配置
|
||||
|
||||
### 8.2 安全组件设计
|
||||
- **SecurityConfig**: Spring Security主配置类
|
||||
- **JwtAuthenticationFilter**: JWT认证过滤器
|
||||
- **JwtTokenProvider**: JWT令牌提供者
|
||||
- **UserDetailsService**: 用户详情服务
|
||||
- **AuthenticationEntryPoint**: 认证失败处理
|
||||
- **AccessDeniedHandler**: 访问拒绝处理
|
||||
|
||||
### 8.3 数据安全
|
||||
- 敏感数据加密
|
||||
- SQL注入防护
|
||||
- XSS防护
|
||||
- 输入验证和过滤
|
||||
|
||||
## 9. 性能优化
|
||||
|
||||
### 9.1 数据库优化
|
||||
- 索引优化
|
||||
- 查询优化
|
||||
- 分页查询
|
||||
|
||||
### 9.2 缓存优化
|
||||
- 多级缓存
|
||||
- 缓存预热
|
||||
- 缓存穿透防护
|
||||
|
||||
### 9.3 异步处理
|
||||
- 消息队列
|
||||
- 异步任务
|
||||
- 批量处理
|
||||
|
||||
## 10. 监控和日志
|
||||
|
||||
### 10.1 应用监控
|
||||
- 健康检查
|
||||
- 性能监控
|
||||
- 业务监控
|
||||
|
||||
### 10.2 Log4j2日志管理
|
||||
- **日志框架**: Log4j2 + SLF4J
|
||||
- **日志级别**: TRACE, DEBUG, INFO, WARN, ERROR, FATAL
|
||||
- **日志输出**: 控制台、文件、数据库、远程服务器
|
||||
- **日志格式**: JSON格式结构化日志
|
||||
- **日志轮转**: 按大小和时间自动轮转
|
||||
- **日志过滤**: 基于MDC的日志过滤
|
||||
- **性能优化**: 异步日志记录
|
||||
- **日志聚合**: ELK Stack集成支持
|
||||
|
||||
### 10.3 日志配置策略
|
||||
- **开发环境**: 控制台输出,DEBUG级别
|
||||
- **测试环境**: 文件输出,INFO级别
|
||||
- **生产环境**: 文件+远程输出,WARN级别
|
||||
- **安全日志**: 独立的审计日志文件
|
||||
- **业务日志**: 按模块分离的日志文件
|
||||
|
||||
## 11. 部署方案
|
||||
|
||||
### 11.1 容器化部署
|
||||
- Docker镜像构建
|
||||
- Docker Compose编排
|
||||
- 环境变量配置
|
||||
|
||||
### 11.2 CI/CD流程
|
||||
- 自动化构建
|
||||
- 自动化测试
|
||||
- 自动化部署
|
||||
|
||||
## 12. 开发规范
|
||||
|
||||
### 12.1 代码提交规范
|
||||
- 使用Conventional Commits
|
||||
- 分支管理策略
|
||||
- 代码审查流程
|
||||
|
||||
### 12.2 测试规范
|
||||
- 单元测试覆盖率 > 80%
|
||||
- 集成测试
|
||||
- 端到端测试
|
||||
|
||||
### 12.3 文档规范
|
||||
- API文档自动生成
|
||||
- 代码注释规范
|
||||
- 技术文档维护
|
||||
|
||||
## 13. 项目依赖管理
|
||||
|
||||
### 13.1 Maven依赖
|
||||
```xml
|
||||
<properties>
|
||||
<java.version>21</java.version>
|
||||
<spring-boot.version>3.2.0</spring-boot.version>
|
||||
<spring-ai.version>0.8.0</spring-ai.version>
|
||||
<mybatis-plus.version>3.5.4</mybatis-plus.version>
|
||||
<spring-security.version>6.1.0</spring-security.version>
|
||||
<log4j2.version>2.20.0</log4j2.version>
|
||||
<jwt.version>0.11.5</jwt.version>
|
||||
</properties>
|
||||
```
|
||||
|
||||
### 13.2 依赖版本管理
|
||||
- 统一版本管理
|
||||
- 依赖冲突解决
|
||||
- 安全漏洞检查
|
||||
|
||||
### 13.3 核心依赖配置
|
||||
```xml
|
||||
<!-- Spring Security -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-security</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- JWT -->
|
||||
<dependency>
|
||||
<groupId>io.jsonwebtoken</groupId>
|
||||
<artifactId>jjwt-api</artifactId>
|
||||
<version>${jwt.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.jsonwebtoken</groupId>
|
||||
<artifactId>jjwt-impl</artifactId>
|
||||
<version>${jwt.version}</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.jsonwebtoken</groupId>
|
||||
<artifactId>jjwt-jackson</artifactId>
|
||||
<version>${jwt.version}</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- Log4j2 -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-log4j2</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-logging</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
## 14. 开发工具配置
|
||||
|
||||
### 14.1 IDE配置
|
||||
- IntelliJ IDEA推荐配置
|
||||
- 代码格式化规则
|
||||
- 代码检查规则
|
||||
|
||||
### 14.2 构建工具配置
|
||||
- Maven配置优化
|
||||
- 插件配置
|
||||
- 构建脚本
|
||||
|
||||
## 15. 质量保证
|
||||
|
||||
### 15.1 代码质量
|
||||
- SonarQube代码检查
|
||||
- 代码规范检查
|
||||
- 性能检查
|
||||
|
||||
### 15.2 测试质量
|
||||
- 测试用例设计
|
||||
- 测试数据管理
|
||||
- 测试环境管理
|
||||
|
||||
---
|
||||
|
||||
## 总结
|
||||
|
||||
本技术方案提供了一个完整的SpringBoot单体后端服务架构,涵盖了从技术选型到部署运维的各个方面。方案注重:
|
||||
|
||||
1. **技术先进性**: 使用最新稳定版本的技术栈
|
||||
2. **架构合理性**: 分层清晰,职责明确
|
||||
3. **可扩展性**: 支持水平扩展和功能扩展
|
||||
4. **可维护性**: 统一的代码规范和开发流程
|
||||
5. **高性能**: 多级缓存和异步处理
|
||||
6. **高可用**: 完善的监控和异常处理机制
|
||||
|
||||
该方案可以作为项目开发的技术指导文档,确保项目的技术实现符合最佳实践。
|
||||
Reference in New Issue
Block a user