版本: 1.1 最后更新: 2026年6月27日 适用对象: 初级开发者、中级开发者、测试工程师
| 软件 | 版本要求 | 下载地址 |
|---|---|---|
| JDK | 17+ | Oracle JDK |
| Maven | 3.8+ | Maven |
| Node.js | 18+ | Node.js |
| PostgreSQL | 14+ | PostgreSQL |
| Redis | 7+ | Redis |
| Docker | 24+ | Docker |
# Windows PowerShell$env:JAVA_HOME="C:\Program Files\Java\jdk-17"$env:MAVEN_HOME="C:\apache-maven-3.8.6"$env:PATH="$env:JAVA_HOME\bin;$env:MAVEN_HOME\bin;$env:PATH"xxxxxxxxxxQuickBlue-parent-pg/├── QuickBlue-parent-pg/ # 父POM,统一依赖管理├── QuickBlue-admin/ # 管理后台(Spring Boot Admin)├── QuickBlue-gateway/ # API网关服务├── QuickBlue-modules/ # 业务模块│ ├── QuickBlue-system/ # 系统管理服务│ ├── QuickBlue-business/ # 业务服务│ ├── QuickBlue-ai/ # AI智能体服务│ └── QuickBlue-support/ # 支撑服务├── QuickBlue-common/ # 公共模块│ ├── QuickBlue-common-core/ # 核心工具类│ ├── QuickBlue-common-web/ # Web相关(含链路追踪)│ ├── QuickBlue-common-database/# 数据库相关│ └── ... # 其他公共模块├── database/postgresql/ # 数据库脚本├── nacos_config/ # Nacos配置中心配置├── doc/ # 文档目录└── uploads/ # 文件上传目录
x# 启动 PostgreSQL(已预配置)# 启动 Redis(已预配置)
# 启动 Zipkin 追踪服务docker run -d -p 9411:9411 --name zipkin openzipkin/zipkin
# 启动 Nacos 配置中心# 使用 nacos_config 目录下的配置文件xxxxxxxxxx# 1. 构建项目cd QuickBlue-parent-pgmvn clean package -DskipTests
# 2. 启动各服务(按顺序)# 启动 Nacos(如果未启动)# 启动 Gatewaycd QuickBlue-gateway && mvn spring-boot:run
# 启动 System 服务cd QuickBlue-modules/QuickBlue-system && mvn spring-boot:run
# 启动 Business 服务cd QuickBlue-modules/QuickBlue-business && mvn spring-boot:run| 服务 | URL | 说明 |
|---|---|---|
| API Gateway | http://localhost:8080 | API 入口 |
| Spring Boot Admin | http://localhost:9090 | 服务监控 |
| Zipkin UI | http://localhost:9411 | 链路追踪 |
| Knife4j API 文档 | http://localhost:8080/doc.html | API 文档 |
xxxxxxxxxxcom.budaos.[module].[layer].[package]# 示例:com.budaos.system.controller # 控制器层com.budaos.system.service # 服务层com.budaos.system.mapper # Mapper层com.budaos.system.domain # 实体类com.budaos.system.dto # DTO对象com.budaos.system.vo # VO对象
✅ 使用 Lombok 简化代码(@Data, @Builder, @Slf4j)
✅ 统一异常处理(GlobalExceptionHandler)
✅ 接口返回统一格式(ResponseDTO)
✅ 日志记录规范(使用 SLF4J + Logback)
xxxxxxxxxxmanagement tracing sampling probability$TRACING_SAMPLE_RATE0.0 # 采样率: 0.0-1.0 zipkin tracing endpoint$ZIPKIN_ENDPOINThttp//localhost9411/api/v2/spans| 环境 | 推荐值 | 说明 |
|---|---|---|
| 开发环境 | TRACING_SAMPLE_RATE=1.0 | 100%采样,便于调试 |
| 测试环境 | TRACING_SAMPLE_RATE=0.5 | 50%采样,平衡性能 |
| 生产环境 | TRACING_SAMPLE_RATE=0.1 | 10%采样,降低性能影响 |
✅ 所有 HTTP 请求自动追踪
✅ Trace ID 自动传播(X-B3-TraceId 头部)
✅ 日志自动包含 Trace ID 和 Span ID
xxxxxxxxxxpublic class UserService { (value = "user-service.find-by-id", extraTags = { (key = "user.id", value = "#id"), (key = "user.type", value = "'normal'") }) public User findById(Long id) { return userMapper.selectById(id); }}xxxxxxxxxxpublic class AsyncService { ("async.task.process") public void processAsyncTask(String taskId) { // 异步处理逻辑 log.info("Processing async task: {}", taskId); }}查看日志: 检查控制台日志是否包含 [traceId] 和 [spanId]
调用接口: 发起一个跨服务的请求
访问 Zipkin: http://localhost:9411 查看调用链路
搜索 Trace: 在 Zipkin UI 中搜索 Trace ID
✅ 使用 SmallintBooleanTypeHandler 处理 smallint 类型的布尔字段
✅ 配置在 MybatisPlusConfig.java 中
✅ 不需要修改 SQL,自动类型转换
xxxxxxxxxx// 使用 MyBatis Plus 分页Page<User> page = new Page<>(1, 10); // 第1页,每页10条Page<User> result = userMapper.selectPage(page, wrapper);| 脚本 | 位置 | 说明 |
|---|---|---|
| 创建数据库 | database/postgresql/01_create_databases.sql | 初始化数据库 |
| Support 模块迁移 | database/postgresql/02_migrate_support.sql | 支撑服务表结构 |
| System 模块迁移 | database/postgresql/03_migrate_system.sql | 系统服务表结构 |
| Business 模块迁移 | database/postgresql/04_migrate_business.sql | 业务服务表结构 |
| AI 模块表结构 | database/postgresql/05_create_ai_tables.sql | AI服务表结构 |
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/{service}/v1/{resource} | 查询单个资源 |
| GET | /api/{service}/v1/{resource}/list | 查询资源列表 |
| POST | /api/{service}/v1/{resource} | 创建资源 |
| PUT | /api/{service}/v1/{resource}/{id} | 更新资源 |
| DELETE | /api/{service}/v1/{resource}/{id} | 删除资源 |
xxxxxxxxxx{ "code": 200, "message": "操作成功", "data": { /* 返回数据 */ }, "timestamp": "2026-05-01T10:30:45.123"}✅ 全局异常处理器(GlobalExceptionHandler)
✅ 统一错误码管理(ErrorCode 枚举)
✅ 业务异常自动转换为标准响应
xxxxxxxxxxQuickBule-admin-webpg/├── src/│ ├── api/ # 接口请求封装│ ├── views/ # 页面组件│ ├── components/ # 可复用组件│ ├── store/ # Pinia 状态管理│ ├── router/ # 路由配置│ └── utils/ # 工具函数
xxxxxxxxxx// src/api/system/user.jsimport request from '@/utils/request'
export function getUserList(params) { return request({ url: '/system/user/list', method: 'get', params })}
// 在组件中使用const { data } = await getUserList({ page: 1, size: 10 })xxxxxxxxxx(replace = AutoConfigureTestDatabase.Replace.NONE)class UserServiceTest { private UserService userService; void testFindById() { User user = userService.findById(1L); assertNotNull(user); assertEquals("admin", user.getUsername()); }}✅ 使用 Knife4j 文档进行手动测试
✅ 使用 Postman 导入 Swagger JSON 进行自动化测试
✅ 使用 JMeter 进行压力测试
xxxxxxxxxx# QuickBlue-gateway/DockerfileFROM openjdk:17-jre-slimCOPY target/QuickBlue-gateway.jar app.jarEXPOSE 8080ENTRYPOINT ["java","-jar","/app.jar"]背景: 项目根目录
nacos_config/存放了所有服务的 Nacos 配置模板(common 公共配置 + services 服务私有配置)。以往每次改完模板需要手动打开 Nacos 控制台逐条粘贴发布,容易出错。现已内置「一键同步」功能,在管理后台点击按钮即可将本地模板批量推送到 Nacos。
xxxxxxxxxxnacos_config/ ← 👈 唯一数据源(你只改这里)├── common/ 公共配置│ ├── common-config.yaml│ ├── postgresql-common.yaml│ ├── redis-common.yaml│ ├── sa-token-common.yaml│ └── level3-protect-common.yaml└── services/ 服务私有配置├── QuickBlue-gateway.yaml├── QuickBlue-system-pg.yaml├── QuickBlue-business-pg.yaml├── QuickBlue-support-pg.yaml├── QuickBlue-ai-pg.yaml└── QuickBlue-admin.yaml│ Maven 编译时│ maven-resources-plugin 自动复制▼target/classes/nacos_config_templates/ ← 运行时 classpath(自动生成)│ 管理后台 → Nacos配置管理 → 点击「一键同步」▼Nacos 服务器 ← 配置发布到 Nacos,同名配置自动更新
修改配置模板:编辑 nacos_config/common/ 或 nacos_config/services/ 下的 .yaml 文件
编译项目:mvn compile -pl QuickBlue-modules/QuickBlue-support(IDE 自动编译也可)
启动 support 服务:确保 support 服务正常运行
打开管理后台:进入 系统管理 → Nacos配置管理
选择命名空间:在下拉框中选择目标命名空间(如 QuickBlue-dev)
点击「一键同步」:
系统自动扫描 classpath 下的所有配置模板
逐文件对比 Nacos 上已有内容:
内容无变化 → 跳过(不会重复写入)
已存在但内容不同 → 更新(覆盖)
新配置 → 创建(首次发布)
查看结果:弹窗显示同步汇总(共扫描 N 个文件,成功/跳过/失败各多少)
| 特性 | 说明 |
|---|---|
| 幂等安全 | 多次点击不会重复写入,内容未变自动跳过 |
| 命名映射 | services/QuickBlue-system-pg.yaml → Nacos dataId QuickBlue-system.yaml(自动去 -pg 后缀) |
| 权限控制 | 按钮受 system:nacos-config:edit 权限保护 |
| 零依赖 | 纯 Spring 类路径扫描,不需要文件系统路径 |
唯一数据源:始终编辑项目根 nacos_config/ 下的文件,不要修改 support/src/main/resources/nacos_config_templates/(那是编译自动生成的回退副本)
分组规则:
common/ → Nacos group QuickBlue_GROUP,公共配置供所有服务共享读取
services/ → Nacos group QuickBlue_GROUP,文件名去掉 -pg 后缀作为 dataId
新增配置文件后:需要重新编译 support 模块才会被一键同步扫描到
占位符规范:使用 ${ENV_VAR:default} 格式,环境变量通过部署配置注入
| 场景 | 操作 |
|---|---|
| 开发阶段新增配置项 | 编辑模板 → 编译 → 一键同步 |
| 配置项值变更 | 直接在 Nacos 控制台修改(如需持久化到模板,同步修改 nacos_config/ 文件) |
| 新增一个服务 | 在 services/ 下添加 QuickBlue-xxx-pg.yaml → 编译 → 一键同步 |
| 首次部署环境 | 逐个命名空间执行一键同步(dev → test → prod) |
A: 检查以下几点:
✅ micrometer-tracing-starter-brave 依赖是否正确引入
✅ TRACING_SAMPLE_RATE 环境变量是否设置为大于 0 的值
✅ ZIPKIN_ENDPOINT 是否正确配置
✅ Zipkin 服务是否正常运行
A: 检查 logback-spring.xml 是否存在且配置正确,确保使用了 %X{traceId:-} 格式。
A: 设置 TRACING_SAMPLE_RATE=0.0 或在配置中设置 management.tracing.sampling.probability=0.0
A: 创建自定义 TracerCustomizer Bean,重写 customize 方法。
技术支持: 如遇问题,请联系架构支持团队或查阅
doc/目录下的相关文档。