一个基于 Spring Boot 和 Spring Cloud 的综合性多服务后端系统
提供 API 开放平台、BI(商业智能)分析、用户中心和网关服务的微服务架构解决方案
WanwuCode (万物代码) 是一个现代化的微服务架构项目,采用 Spring Boot 和 Spring Cloud 构建。项目提供完整的后端服务解决方案,包括:
- API 开放平台:提供接口调用、管理和分析功能
- BI 智能分析:具有 AI 驱动的图表分析和商业智能功能
- 用户中心:统一的用户认证和管理服务
- 网关服务:统一的流量入口和路由管理
wanwu-code-backend/
├── wanwu-code-gateway/ # 网关服务 (端口: 4399)
├── wanwu-code-api/ # API 开放平台 (端口: 8805)
├── wanwu-code-bi/ # BI 商业智能服务 (端口: 8807)
├── wanwu-code-usercenter/ # 用户中心服务
├── wanwu-code-common/ # 公共工具类和通用代码
├── wanwu-code-api-common/ # API 特定的共享模型和接口
└── sql/ # 数据库初始化脚本
- 服务注册发现:Nacos
- RPC 通信:Dubbo 3.0.9
- HTTP 通信:OpenFeign
- 消息队列:RabbitMQ
- 配置管理:Nacos Config
- API 管理:接口定义、发布、调用统计、权限控制
- 智能分析:AI 驱动的数据图表生成和分析
- 用户系统:统一认证、权限管理、用户信息管理
- 网关路由:动态路由、负载均衡、跨域处理
- 服务监控:服务健康检查、日志管理、性能监控
- 身份认证:Sa-Token 权限框架
- 接口安全:API 密钥管理、调用频控
- 数据安全:数据加密、SQL 注入防护
- 服务安全:服务间调用认证、网关鉴权
- 缓存系统:Redis 多级缓存
- 搜索引擎:Elasticsearch 集成
- 文件存储:腾讯云 COS 对象存储
- 消息通知:微信集成、邮件服务
| 技术 | 版本 | 说明 |
|---|---|---|
| Spring Boot | 2.7.2 | 核心框架 |
| Spring Cloud | 2021.0.5 | 微服务框架 |
| Spring Cloud Alibaba | 2021.0.5.0 | 阿里云集成 |
| MyBatis Plus | 3.5.2 | ORM 框架 |
| Sa-Token | 1.35.0.RC | 权限认证 |
| Dubbo | 3.0.9 | RPC 框架 |
| 中间件 | 说明 |
|---|---|
| Nacos | 服务注册发现、配置管理 |
| Redis | 缓存、会话存储 |
| Elasticsearch | 搜索引擎 |
| RabbitMQ | 消息队列 |
| MySQL | 关系型数据库 |
| 工具 | 说明 |
|---|---|
| Hutool | Java 工具类库 |
| Lombok | 代码简化 |
| Gson | JSON 处理 |
| Knife4j | API 文档 |
- JDK: 1.8+
- Maven: 3.6+
- MySQL: 5.7+
- Redis: 3.0+
- Nacos: 2.0+
- Node.js: 12+ (前端开发)
-
克隆项目
git clone https://github.com/your-username/wanwu-code.git cd wanwu-code -
构建项目
mvn clean install
-
启动基础服务
# 启动 Nacos (默认端口 8848) # 启动 Redis (默认端口 6379) # 启动 MySQL (默认端口 3306)
-
初始化数据库
# 详见数据库初始化章节
- 操作系统: Windows / macOS / Linux
- IDE: IntelliJ IDEA / Eclipse
- JDK: Oracle JDK 1.8 或 OpenJDK 1.8+
- 构建工具: Maven 3.6+
- 操作系统: Linux (推荐 CentOS 7+)
- 内存: 最低 2GB,推荐 4GB+
- CPU: 最低 2 核,推荐 4 核+
- 存储: 最低 10GB 可用空间
项目支持多环境配置:
- 开发环境:
application.yml(默认) - 测试环境:
application-test.yml - 生产环境:
application-prod.yml
- 命令行参数
- Java 系统属性
- 操作系统环境变量
- 外部配置文件 (application-{profile}.yml)
- Nacos 配置中心
- 内部配置文件 (application.yml)
在 Nacos 控制台添加以下配置:
# 数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/wanwu_code?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=your_password
# Redis 配置
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=your_redis_password
# Elasticsearch 配置
elasticsearch.host=localhost
elasticsearch.port=9200-- 创建主数据库
CREATE DATABASE wanwu_code DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建 API 数据库
CREATE DATABASE wanwu_code_api DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建 BI 数据库
CREATE DATABASE wanwu_code_bi DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建消息数据库
CREATE DATABASE wanwu_code_message DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;# 基础表结构
mysql -u root -p wanwu_code < sql/create_table.sql
# API 服务表
mysql -u root -p wanwu_code_api < sql/create_table_api.sql
# BI 服务表
mysql -u root -p wanwu_code_bi < sql/create_table_bi.sql
# 消息服务表
mysql -u root -p wanwu_code_message < sql/create_table_message.sqluser: 用户基本信息user_role: 用户角色关系role: 角色信息permission: 权限信息
api_info: 接口信息api_user: API 用户信息user_api_relation: 用户接口关系api_call_log: 接口调用日志
chart_info: 图表信息chart_data: 图表数据analysis_task: 分析任务analysis_result: 分析结果
# 启动网关服务
mvn spring-boot:run -pl wanwu-code-gateway
# 启动 API 服务
mvn spring-boot:run -pl wanwu-code-api
# 启动 BI 服务
mvn spring-boot:run -pl wanwu-code-bi
# 启动用户中心
mvn spring-boot:run -pl wanwu-code-usercenter#!/bin/bash
# start-all.sh
echo "启动 WanwuCode 微服务..."
# 启动基础服务
mvn spring-boot:run -pl wanwu-code-usercenter &
USERCENTER_PID=$!
mvn spring-boot:run -pl wanwu-code-gateway &
GATEWAY_PID=$!
# 启动业务服务
mvn spring-boot:run -pl wanwu-code-api &
API_PID=$!
mvn spring-boot:run -pl wanwu-code-bi &
BI_PID=$!
echo "所有服务启动完成"
echo "网关服务: http://localhost:4399"
echo "API 服务: http://localhost:8805"
echo "BI 服务: http://localhost:8807"
# 等待用户输入来停止服务
read -p "按回车键停止所有服务..."
# 停止所有服务
kill $USERCENTER_PID $GATEWAY_PID $API_PID $BI_PID
echo "所有服务已停止"- Nacos: 服务注册中心
- MySQL/Redis: 基础设施
- 用户中心: 提供认证服务
- 网关服务: 流量入口
- 业务服务: API 服务、BI 服务
# Dockerfile 示例
FROM openjdk:8-jre-slim
COPY target/wanwu-code-*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app.jar"]# 构建镜像
docker build -t wanwu-code:latest .
# 运行容器
docker run -d -p 8080:8080 wanwu-code:latest启动服务后,可以通过以下地址访问 API 文档:
- API 服务文档: http://localhost:8805/api/doc.html
- BI 服务文档: http://localhost:8807/api/doc.html
# 用户登录
POST /api/user/login
Content-Type: application/json
{
"userAccount": "admin",
"userPassword": "password"
}
# 获取用户信息
GET /api/user/current
Authorization: Bearer {token}# 获取接口列表
GET /api/apiInfo/list
Authorization: Bearer {token}
# 创建接口
POST /api/apiInfo/add
Authorization: Bearer {token}
Content-Type: application/json
{
"name": "测试接口",
"description": "接口描述",
"url": "http://example.com/api",
"method": "GET"
}# 生成图表
POST /api/chart/gen
Authorization: Bearer {token}
Content-Type: application/json
{
"goal": "分析用户增长趋势",
"chartType": "折线图",
"data": "..."
}- 类名: 使用 UpperCamelCase
- 方法名: 使用 lowerCamelCase
- 常量: 使用 UPPER_SNAKE_CASE
- 包名: 使用小写字母
/**
* API 信息实体类
*
* @author 作者名
* @since 2023-12-01
*/
public class ApiInfo {
/**
* 接口 ID
*/
private Long id;
}src/main/java/com/cong/
├── controller/ # 控制器层
├── service/ # 业务逻辑层
│ ├── impl/ # 业务实现
├── mapper/ # 数据访问层
├── model/ # 数据模型层
│ ├── entity/ # 实体类
│ ├── dto/ # 数据传输对象
│ └── vo/ # 视图对象
├── config/ # 配置类
├── utils/ # 工具类
└── exception/ # 异常处理
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(BusinessException.class)
public BaseResponse<?> businessExceptionHandler(BusinessException e) {
log.error("BusinessException", e);
return ResultUtils.error(e.getCode(), e.getMessage());
}
@ExceptionHandler(RuntimeException.class)
public BaseResponse<?> runtimeExceptionHandler(RuntimeException e) {
log.error("RuntimeException", e);
return ResultUtils.error(ErrorCode.SYSTEM_ERROR);
}
}@Slf4j
@Service
public class ApiInfoService {
public void createApi(ApiInfo apiInfo) {
log.info("创建接口: {}", apiInfo.getName());
try {
// 业务逻辑
log.info("接口创建成功: id={}", apiInfo.getId());
} catch (Exception e) {
log.error("接口创建失败: {}", apiInfo.getName(), e);
throw new BusinessException(ErrorCode.OPERATION_ERROR);
}
}
}wanwu-code/
├── wanwu-code-backend/ # 后端项目
│ ├── wanwu-code-gateway/ # 网关服务
│ │ ├── src/
│ │ │ ├── main/
│ │ │ │ ├── java/com/cong/gateway/
│ │ │ │ │ ├── config/ # 路由配置
│ │ │ │ │ ├── filter/ # 网关过滤器
│ │ │ │ │ └── GatewayApplication.java
│ │ │ │ └── resources/
│ │ │ │ └── application.yml
│ │ │ └── test/
│ │ └── pom.xml
│ │
│ ├── wanwu-code-api/ # API 服务
│ │ ├── src/
│ │ │ ├── main/
│ │ │ │ ├── java/com/cong/api/
│ │ │ │ │ ├── controller/
│ │ │ │ │ ├── service/
│ │ │ │ │ ├── mapper/
│ │ │ │ │ ├── model/
│ │ │ │ │ └── ApiApplication.java
│ │ │ │ └── resources/
│ │ │ │ ├── mapper/ # MyBatis 映射文件
│ │ │ │ └── application.yml
│ │ │ └── test/
│ │ ├── doc/ # API 文档
│ │ └── pom.xml
│ │
│ ├── wanwu-code-bi/ # BI 服务
│ │ ├── src/
│ │ │ ├── main/
│ │ │ │ ├── java/com/cong/bi/
│ │ │ │ │ ├── controller/
│ │ │ │ │ ├── service/
│ │ │ │ │ ├── mapper/
│ │ │ │ │ ├── model/
│ │ │ │ │ └── BiApplication.java
│ │ │ │ └── resources/
│ │ │ │ └── application.yml
│ │ │ └── test/
│ │ └── pom.xml
│ │
│ ├── wanwu-code-usercenter/ # 用户中心
│ │ ├── src/
│ │ │ └── main/
│ │ │ ├── java/com/cong/usercenter/
│ │ │ │ ├── controller/
│ │ │ │ ├── service/
│ │ │ │ ├── mapper/
│ │ │ │ ├── model/
│ │ │ │ └── UserCenterApplication.java
│ │ │ └── resources/
│ │ │ └── application.yml
│ │ └── pom.xml
│ │
│ ├── wanwu-code-common/ # 公共模块
│ │ ├── src/
│ │ │ └── main/
│ │ │ └── java/com/cong/common/
│ │ │ ├── config/ # 公共配置
│ │ │ ├── utils/ # 工具类
│ │ │ ├── exception/ # 异常类
│ │ │ └── constant/ # 常量类
│ │ └── pom.xml
│ │
│ ├── wanwu-code-api-common/ # API 公共模块
│ │ ├── src/
│ │ │ └── main/
│ │ │ └── java/com/cong/apicommon/
│ │ │ ├── model/ # API 相关模型
│ │ │ └── constant/ # API 常量
│ │ └── pom.xml
│ │
│ └── sql/ # 数据库脚本
│ ├── create_table.sql # 基础表结构
│ ├── create_table_api.sql # API 服务表
│ ├── create_table_bi.sql # BI 服务表
│ └── create_table_message.sql # 消息服务表
│
├── wanwu-code-frontend/ # 前端项目
│ ├── src/
│ │ ├── components/ # 公共组件
│ │ ├── views/ # 页面组件
│ │ ├── store/ # 状态管理
│ │ ├── router/ # 路由配置
│ │ ├── api/ # API 接口
│ │ └── utils/ # 工具函数
│ ├── public/ # 静态资源
│ ├── package.json
│ └── README.md
│
├── docs/ # 项目文档
│ ├── api/ # API 文档
│ ├── deployment/ # 部署文档
│ └── development/ # 开发文档
│
├── scripts/ # 脚本文件
│ ├── start-all.sh # 启动脚本
│ ├── stop-all.sh # 停止脚本
│ └── deploy.sh # 部署脚本
│
├── docker/ # Docker 配置
│ ├── Dockerfile
│ └── docker-compose.yml
│
├── README.md # 项目说明
├── CLAUDE.md # Claude Code 指导文档
└── .gitignore # Git 忽略文件
解决方案:
- 检查 Nacos 服务是否正常启动
- 确认 Nacos 地址配置是否正确
- 检查网络连接是否正常
# application.yml
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
config:
server-addr: localhost:8848解决方案:
- 确认 MySQL 服务是否启动
- 检查数据库用户名和密码是否正确
- 确认数据库是否已创建
# 测试数据库连接
mysql -u root -p -e "SHOW DATABASES;"解决方案:
- 检查 Redis 服务是否启动
- 确认 Redis 配置是否正确
- 检查防火墙设置
# 测试 Redis 连接
redis-cli ping解决方案:
- 确认服务是否在 Nacos 中注册成功
- 检查服务名称是否正确
- 查看网络连接和端口配置
解决方案:
- 检查调用频控配置
- 调整频控参数
- 使用缓存减少调用次数
- Fork 项目到个人仓库
- 创建功能分支:
git checkout -b feature/new-feature - 提交代码:
git commit -m "Add new feature" - 推送分支:
git push origin feature/new-feature - 创建 Pull Request
type(scope): description
[optional body]
[optional footer]
类型说明:
feat: 新功能fix: 修复 bugdocs: 文档更新style: 代码格式调整refactor: 代码重构test: 测试相关chore: 构建工具或辅助工具的变动
示例:
feat(api): add user authentication feature
- Add user login endpoint
- Implement JWT token validation
- Add password encryption
Closes #123
- 代码风格: 遵循项目代码规范
- 测试覆盖: 确保新增功能有相应测试
- 文档更新: 更新相关文档
- 性能考虑: 注意性能影响
- 初始版本发布
- 基础微服务架构搭建
- API 开放平台核心功能
- BI 智能分析基础功能
- 增强用户权限管理
- 优化 API 调用性能
- 新增数据可视化组件
- 容器化部署支持
- 服务网格集成
- 分布式链路追踪
本项目采用 MIT License 许可证。
- 项目主页: https://github.com/DevYangJC/wanwu-code
- 问题反馈: https://github.com/DevYangJC/wanwu-code/issues
- 邮箱: 923584731@qq.com
感谢所有为这个项目做出贡献的开发者和社区成员。
Happy Coding! 🚀
如果这个项目对您有帮助,请给我们一个 ⭐️ Star!