# 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 防护 **开箱即用,无需任何配置**,框架自动拦截以下攻击: - `