# ThinkBoot
**Repository Path**: coolpai/think-boot
## Basic Information
- **Project Name**: ThinkBoot
- **Description**: ThinkBoot 是一个基于 Spring Boot 3 的轻量级快速开发框架,专为 API/客户端服务场景设计。
- **Primary Language**: Java
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 2
- **Created**: 2026-05-13
- **Last Updated**: 2026-05-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ThinkBoot
轻量级 Spring Boot 3 快速开发框架
简介 •
特性 •
快速开始 •
模块说明 •
配置说明 •
使用示例 •
开源协议
---
## 简介
ThinkBoot 是一个基于 Spring Boot 3 的轻量级快速开发框架,专为 API/客户端服务场景设计。
与若依(RuoYi)等重量级框架不同,ThinkBoot **不包含复杂的角色权限体系**,只提供客户端最常用的 Token 认证功能。框架采用模块化设计,所有第三方依赖均可按需启用,无需复杂配置即可开箱即用。
**设计哲学**:让开发者更关注业务逻辑,减少繁琐的配置工作。
## 特性
- **轻量简洁**:无冗余功能,聚焦 API 服务核心需求
- **模块化设计**:各功能模块独立,按需引入
- **按需加载**:所有第三方依赖通过条件配置加载,不配置不报错
- **开箱即用**:零配置或最小配置即可启动
- **企业级特性**:内置 XSS 防护、接口幂等性、分布式锁、Spring Cache 支持
- **代码生成**:内置代码生成器,一键生成 CRUD 代码
- **多数据源**:内置动态数据源支持,轻松切换
- **统一存储**:MinIO/阿里云 OSS/腾讯云 COS 统一接口
- **免费开源**:遵循 MIT 开源协议,可自由商用
## 技术栈
| 组件 | 技术 | 版本 |
|------|------|------|
| 基础框架 | Spring Boot | 3.2.5 |
| Java 版本 | JDK | 17+ |
| 认证鉴权 | Sa-Token | 1.38.0 |
| ORM 框架 | MyBatis-Plus | 3.5.6 |
| 多数据源 | Dynamic Datasource | 4.3.0 |
| 缓存 | Spring Data Redis / Spring Cache | - |
| 连接池 | HikariCP | - |
| 工具库 | Hutool | 5.8.27 |
| API 文档 | SpringDoc (OpenAPI 3) | 2.5.0 |
| 对象存储 | MinIO / 阿里云 OSS / 腾讯云 COS | - |
## 快速开始
### 1. 环境要求
- JDK 17 或以上
- Maven 3.6+
- MySQL 8.0+(可选)
- Redis(可选)
### 2. 引入依赖
在你的 `pom.xml` 中引入 ThinkBoot 父 POM:
```xml
com.thinkboot
think-boot
1.0.0
```
引入需要的模块:
```xml
com.thinkboot
think-boot-web
com.thinkboot
think-boot-auth
com.thinkboot
think-boot-database
com.thinkboot
think-boot-redis
com.thinkboot
think-boot-cache
com.thinkboot
think-boot-security
com.thinkboot
think-boot-storage
```
### 3. 配置文件
创建 `application.yml`:
```yaml
server:
port: 8080
# 数据源配置(不使用时可不配置)
spring:
datasource:
dynamic:
primary: master
datasource:
master:
url: jdbc:mysql://localhost:3306/your_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: your_password
driver-class-name: com.mysql.cj.jdbc.Driver
# Redis 配置(不使用时可不配置)
data:
redis:
host: localhost
port: 6379
password:
database: 0
# MyBatis-Plus 配置
mybatis-plus:
mapper-locations: classpath*:/mapper/**/*.xml
configuration:
map-underscore-to-camel-case: true
# ThinkBoot 模块开关
think-boot:
auth:
enabled: true # 启用认证模块
database:
enabled: true # 启用数据库模块
redis:
enabled: false # 启用 Redis 模块
storage:
type: minio # 对象存储类型:minio/aliyun/tencent
minio:
endpoint: http://localhost:9000
access-key: minioadmin
secret-key: minioadmin
bucket-name: default
cors:
enabled: true # 启用跨域
swagger:
enabled: true # 启用 API 文档
```
### 4. 运行项目
```bash
# 编译
mvn clean install
# 运行示例项目
cd think-boot-example
mvn spring-boot:run
```
访问 API 文档:http://localhost:8080/swagger-ui.html
## 模块说明
### think-boot-core
核心模块,提供基础工具类和常量。
**包含内容**:
- 常量定义:`CommonConstants`、`RedisConstants`
- 枚举:`ResultCode`
- 异常:`BusinessException`
- 工具类:`ServletUtils`、`ExcelUtils`
- 对象转换:`BaseConverter`(MapStruct 接口)
**使用示例**:
```java
// DTO 转实体
@Mapper(componentModel = "spring")
public interface UserConverter extends BaseConverter {
}
// 使用
@Autowired
private UserConverter userConverter;
User user = userConverter.to(userDTO);
List users = userConverter.toList(userDTOList);
```
### think-boot-web
Web 层模块,提供统一响应、异常处理、跨域配置等。
**包含内容**:
- 统一响应:`R` 类
- 分页响应:`PageResult` 类
- 全局异常处理:`GlobalExceptionHandler`
- Jackson 配置:时间格式统一
- CORS 配置:跨域支持
- 日志配置:TraceId 追踪
- Swagger 配置:API 文档
**使用示例**:
```java
@RestController
public class UserController {
@GetMapping("/user/{id}")
public R getUser(@PathVariable Long id) {
User user = userService.getById(id);
return R.ok(user);
}
@PostMapping("/user")
public R createUser(@RequestBody User user) {
userService.save(user);
return R.ok();
}
}
```
### think-boot-auth
认证模块,基于 Sa-Token 实现。
**包含内容**:
- 认证配置:`SaTokenConfigure`
- 拦截器配置:`SaTokenWebMvcConfig`
- 认证服务:`AuthService`
- 登录用户:`LoginUser`
- 忽略认证注解:`@IgnoreAuth`
**使用示例**:
```java
@RestController
public class AuthController {
@Autowired
private AuthService authService;
@PostMapping("/login")
public R login(@RequestParam String username, @RequestParam String password) {
// 验证用户名密码...
String token = authService.login(userId, username);
return R.ok(token);
}
@GetMapping("/user/info")
public R getUserInfo() {
return R.ok(authService.getLoginUser());
}
}
```
**跳过认证的方式**:
方式一:使用 `@IgnoreAuth` 注解(推荐)
```java
@RestController
public class AuthController {
@IgnoreAuth
@PostMapping("/login")
public R login(@RequestParam String username, @RequestParam String password) {
// 不需要登录即可访问
return R.ok("token");
}
@IgnoreAuth
@PostMapping("/register")
public R register(@RequestBody User user) {
// 注册接口不需要登录
return R.ok();
}
}
```
方式二:在 Controller 类上标注(整个类跳过认证)
```java
@IgnoreAuth
@RestController
public class PublicController {
// 所有接口都不需要登录
}
```
方式三:在配置文件中配置白名单
```yaml
think-boot:
auth:
enabled: true
exclude-paths:
- /login
- /register
- /api/public/**
```
### think-boot-database
数据库模块,基于 MyBatis-Plus 实现。
**包含内容**:
- MyBatis-Plus 配置:分页、乐观锁、防全表更新
- 实体基类:`BaseEntity`(自动填充创建/更新时间)
- 分页查询:`PageQuery`
**使用示例**:
```java
// 实体类
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_user")
public class User extends BaseEntity {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
private String username;
private String nickname;
}
// Mapper
@Mapper
public interface UserMapper extends BaseMapper {
}
// Service
@Service
public class UserService extends ServiceImpl {
}
// Controller
@GetMapping("/users")
public R> list(PageQuery query) {
Page page = new Page<>(query.getCurrent(), query.getSize());
Page result = userService.page(page);
return R.ok(new PageResult<>(result));
}
```
**数据源配置**:
单数据源配置(默认方式,开箱即用):
```yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/your_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: your_password
driver-class-name: com.mysql.cj.jdbc.Driver
```
多数据源配置(需要时切换):
```yaml
spring:
datasource:
dynamic:
primary: master # 默认数据源
strict: false # 严格模式:true-未匹配到数据源抛异常,false-未匹配使用默认数据源
datasource:
master: # 主库(写操作)
url: jdbc:mysql://localhost:3306/db1
username: root
password: root123
driver-class-name: com.mysql.cj.jdbc.Driver
slave: # 从库(读操作)
url: jdbc:mysql://localhost:3306/db2
username: root
password: root123
driver-class-name: com.mysql.cj.jdbc.Driver
```
**切换数据源示例**:
```java
@Service
public class UserService extends ServiceImpl {
// 使用从库查询
@DS("slave")
public List queryFromSlave() {
return list();
}
// 使用主库写入(默认)
public void saveUser(User user) {
save(user);
}
}
```
**支持的数据源类型**:
- MySQL(默认内置)
- PostgreSQL
- Oracle
- SQL Server
- 其他 MyBatis-Plus 支持的数据库
> **注意**:使用其他数据库时,需要在 `pom.xml` 中添加对应驱动依赖,并确保 `PaginationInnerInterceptor` 能自动识别数据库类型。
### think-boot-codegen
代码生成模块,基于 MyBatis-Plus Generator 封装。
**包含内容**:
- 代码生成器:`ThinkBootCodeGenerator`
- 使用示例:`CodeGeneratorExample`
**使用示例**:
在你的项目中创建代码生成器类:
```java
import com.baomidou.mybatisplus.annotation.IdType;
import com.thinkboot.codegen.ThinkBootCodeGenerator;
public class CodeGenerator {
public static void main(String[] args) {
new ThinkBootCodeGenerator()
// 数据库连接配置
.url("jdbc:mysql://localhost:3306/thinkboot?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai")
.username("root")
.password("root")
// 要生成的表名(可设置多个)
.tableName("sys_user", "sys_role", "sys_menu")
// 模块配置
.moduleName("system")
// 作者信息
.author("Your Name")
// 代码输出路径
.outputPath("D:/your-project/src/main/java")
// 忽略表前缀(sys_ 会被忽略,生成 User/Role/Menu)
.ignoreTablePrefix("sys_")
// 是否继承 BaseEntity
.useBaseEntity(true)
// 主键类型
.idType(IdType.ASSIGN_ID)
// 执行生成
.generate();
}
}
```
**生成的代码包括**:
- Entity(实体类):继承 BaseEntity,包含 Swagger 注解
- Mapper(数据访问层):继承 BaseMapper
- Service(业务逻辑接口):继承 IService
- ServiceImpl(业务逻辑实现):继承 ServiceImpl
- Controller(控制器):REST 风格
- Mapper.xml(MyBatis XML 映射文件)
**支持的配置项**:
| 配置项 | 说明 | 默认值 |
|--------|------|--------|
| url | 数据库连接 URL | - |
| username | 数据库用户名 | root |
| password | 数据库密码 | root |
| tableName | 要生成的表名 | - |
| moduleName | 模块名称 | - |
| author | 作者 | thinkboot |
| outputPath | 代码输出路径 | 当前目录 |
| parentPackage | 父包名 | com.thinkboot |
| ignoreTablePrefix | 忽略的表前缀 | sys_ |
| useBaseEntity | 是否继承 BaseEntity | false |
| useLogicDelete | 是否启用逻辑删除 | false |
| idType | 主键类型 | ASSIGN_ID |
### think-boot-redis
Redis 缓存模块。
**包含内容**:
- Redis 配置:JSON 序列化
- 工具类:`RedisUtils`
**使用示例**:
```java
@Autowired
private RedisUtils redisUtils;
// 字符串操作
redisUtils.set("key", "value", 3600);
String value = (String) redisUtils.get("key");
// Hash 操作
redisUtils.hSet("user:1", "name", "张三");
String name = (String) redisUtils.hGet("user:1", "name");
// 删除
redisUtils.delete("key");
```
### think-boot-cache
缓存抽象层模块,基于 Spring Cache 实现。
**包含内容**:
- Spring Cache 注解支持:`@Cacheable`、`@CachePut`、`@CacheEvict`
- Redis CacheManager 配置
- Jackson2JsonRedisSerializer 序列化
- 多缓存配置:default(1小时)、short(10分钟)、long(24小时)
**使用示例**:
```java
@Service
public class UserService extends ServiceImpl {
// 查询时缓存数据(1小时过期)
@Cacheable(value = "user", key = "#id")
public User getById(Long id) {
return super.getById(id);
}
// 更新时同步缓存
@CachePut(value = "user", key = "#user.id")
public User updateUser(User user) {
updateById(user);
return user;
}
// 删除时清除缓存
@CacheEvict(value = "user", key = "#id")
public void deleteUser(Long id) {
removeById(id);
}
// 使用不同过期时间的缓存(short = 10分钟)
@Cacheable(value = "short", key = "#code")
public String getSmsCode(String phone) {
// 生成并发送短信验证码
return generateCode();
}
}
```
**支持的注解**:
| 注解 | 说明 | 使用场景 |
|------|------|----------|
| `@Cacheable` | 查询时缓存 | 详情查询、列表查询 |
| `@CachePut` | 更新缓存 | 数据修改后同步缓存 |
| `@CacheEvict` | 清除缓存 | 数据删除时清除缓存 |
### think-boot-security
安全防护模块,提供 XSS 防护、接口幂等性、分布式锁等企业级安全特性。
**包含内容**:
- XSS 防护:自动过滤请求参数中的 XSS 攻击代码
- 接口幂等性:基于 Redis Token 机制,防止重复提交
- 分布式锁:基于 Redis SETNX + Lua 脚本,支持 SpEL 表达式
#### XSS 防护
**开箱即用,无需任何配置**,框架自动拦截以下攻击:
- `