框架概述
ThinkBootCloud 是一款基于 Spring Cloud Alibaba + Spring Boot 3 的轻量级微服务开发框架。与若依等后台管理系统不同,本框架专注于 C 端客户端场景(移动端 App、Web 前端、小程序等),去除了复杂的角色权限体系,仅保留基础的 Token 验证。
设计理念
开箱即用
引入依赖,简单配置即可开始开发
轻量灵活
模块化设计,按需引入,不臃肿
约定优于配置
提供合理默认值,减少配置工作量
安全优先
默认所有接口需要认证,明确标记才放行
技术栈
| 组件 | 版本 | 说明 |
|---|---|---|
| Spring Boot | 3.2.5 | 核心框架 |
| Spring Cloud | 2023.0.1 | 微服务框架 |
| Spring Cloud Alibaba | 2023.0.1.0 | 阿里微服务组件 |
| Nacos | 2.x | 注册中心 + 配置中心 |
| MyBatis-Plus | 3.5.6 | ORM 框架 |
| Redis (Redisson) | 3.27.2 | 缓存 + 分布式锁 |
| RabbitMQ | 3.12.x | 消息队列 |
| RocketMQ | 5.3.x | 消息队列 |
| JWT (JJWT) | 0.12.5 | Token 认证 |
| Gateway | 4.1.x | API 网关 |
| Sentinel | 2023.0.1.0 | 限流熔断 |
模块结构
| 模块 | 说明 | 核心功能 |
|---|---|---|
| think-boot-common | 公共基础模块 | 统一响应 R、分页支持、业务异常、全局异常处理 |
| think-boot-core | 核心配置模块 | CORS 配置、Jackson 时间序列化、请求日志 |
| think-boot-auth | 认证模块 | JWT Token、@IgnoreAuth 注解、拦截器、UserContext |
| think-boot-feign | 服务通信模块 | OpenFeign、Token 自动传递、全局日志 |
| think-boot-sentinel | 限流熔断模块 | Sentinel 集成、自定义限流响应、Nacos 规则源 |
| think-boot-gateway | API 网关模块 | 网关路由、Token 验证、CORS、全局错误处理 |
| think-boot-nacos | 服务注册模块 | Nacos 服务发现、动态配置 |
| think-boot-mybatis | 数据库模块 | MyBatis-Plus、BaseEntity、分页、自动填充 |
| think-boot-redis | 缓存模块 | RedisTemplate 封装、Redisson 分布式锁 |
| think-boot-file | 文件上传模块 | 本地存储、阿里云 OSS |
| think-boot-codegen | 代码生成器模块 | 基于数据库表自动生成 CRUD 代码 |
快速开始
环境要求
- JDK 17+
- Maven 3.6+
- MySQL 8.0+
- Redis 6.0+
- Nacos 2.x(可选)
第一步:编译安装框架
# GitHub
git clone https://github.com/hongxinge/ThinkBootCloud.git
# Gitee
git clone https://gitee.com/hongxinge/think-boot-cloud.git
cd think-boot-cloud
mvn clean install -DskipTests
第二步:引入依赖
<parent>
<groupId>com.thinkboot</groupId>
<artifactId>think-boot-cloud</artifactId>
<version>1.0.0</version>
</parent>
<dependencies>
<dependency>
<groupId>com.thinkboot</groupId>
<artifactId>think-boot-common</artifactId>
</dependency>
<dependency>
<groupId>com.thinkboot</groupId>
<artifactId>think-boot-auth</artifactId>
</dependency>
<!-- 按需引入其他模块 -->
</dependencies>
认证机制
框架采用网关验证 + 内部信任的设计:
客户端请求 → 网关(验证Token + 注入X-User-Id) → 服务A(信任X-User-Id)
✅ 唯一安全验证点 ✅ 直接使用
放行条件
# 方式一:配置免认证路径
thinkboot:
auth:
jwt:
skip-paths:
- /api/auth/login
- /api/public/**
# 方式二:@IgnoreAuth 注解
@IgnoreAuth
@PostMapping("/login")
public R<LoginResponse> login(@RequestBody LoginRequest request) { ... }
获取当前登录用户
// 方式1:UserContext(推荐)
String userId = UserContext.getCurrentUserId();
// 方式2:@CurrentUserId 注解
@GetMapping("/me")
public R<User> getCurrentUser(@CurrentUserId String userId) { ... }
OpenFeign 服务间调用
@FeignClient(name = "user-service", path = "/api/users")
public interface UserFeignClient {
@GetMapping("/{id}")
R<User> getUserById(@PathVariable Long id);
}
// Token 自动传递,无需手动设置 Header
Sentinel 限流熔断
@SentinelResource(value = "getUserById", blockHandler = "handleBlock")
@GetMapping("/{id}")
public R<User> getById(@PathVariable Long id) {
return R.success(userService.getById(id));
}
public R<User> handleBlock(Long id, BlockException ex) {
return R.error(429, "请求过于频繁,请稍后再试");
}
Redis 缓存使用
// 基本操作
RedisUtils.set("user:1", userObject, 30, TimeUnit.MINUTES);
User user = (User) RedisUtils.get("user:1");
// 分布式锁(函数式 API)
String result = DistributedLock.executeWithLock(
"lock:order:create",
() -> { return "success"; },
3, 10, TimeUnit.SECONDS
);
// Spring Cache 注解
@Cacheable(value = "product", key = "#id")
public Product getById(Long id) { ... }
消息队列
RabbitMQ
// 发送消息
@Autowired
private RabbitMessageSender messageSender;
messageSender.send("order.created", order);
messageSender.sendDelay("order.timeout", order, 30 * 60 * 1000);
// 消费消息
@RabbitListener(queues = "thinkboot.order.created")
public void handleOrderCreated(Order order) { ... }
RocketMQ
// 发送消息
@Autowired
private RocketMessageSender sender;
sender.send("order-topic", order);
sender.sendOrderly("order-topic", order, String.valueOf(order.getId()));
sender.sendDelay("delay-topic", order, 3); // 延迟级别
// 消费消息
@RocketMQMessageListener(topic = "order-topic", consumerGroup = "order-consumer-group")
public class OrderMessageConsumer implements RocketMQListener<Order> { ... }
代码生成器
ThinkBootCodeGenerator generator = new ThinkBootCodeGenerator();
generator.url("jdbc:mysql://localhost:3306/your_db")
.username("root").password("your_password")
.tableName("tb_user", "tb_order")
.moduleName("system")
.author("YourName")
.useBaseEntity(true)
.ignoreTablePrefix("tb_")
.generate();
部署模板
框架提供开箱即用的部署模板:
| 模板 | 说明 |
|---|---|
| Docker Compose | 一键部署包含 Nacos、MySQL、Redis、RabbitMQ、Gateway |
| GitHub Actions | CI/CD 配置模板 |
| GitLab CI | CI/CD 配置模板 |
| Nginx 反向代理 | 网关 Nginx 配置模板 |
常见问题
JWT 密钥怎么生成?
# 在线生成
访问 https://www.base64encode.org/,输入至少32位字符串,点击编码
# 代码生成
String key = SecureUtil.generateKey("HmacSHA256").toString();
String base64Key = Base64.encode(key.getBytes());
Gateway 网关如何配置路由?
spring:
cloud:
gateway:
routes:
- id: user-service
uri: lb://user-service
predicates:
- Path=/api/users/**
微服务之间如何通信?
推荐使用 OpenFeign(已内置),定义 @FeignClient 接口,注入直接调用,Token 自动传递。
仓库地址
| 平台 | 地址 |
|---|---|
| GitHub | https://github.com/hongxinge/ThinkBootCloud |
| Gitee(国内镜像) | https://gitee.com/hongxinge/think-boot-cloud |
| GitHub Issues | https://github.com/hongxinge/ThinkBootCloud/issues |