# springboot4x-template
**Repository Path**: mi9688-wine/springboot4x-template
## Basic Information
- **Project Name**: springboot4x-template
- **Description**: 一个基于springboot4.1的后端开发模板。集成xbatis框架,以及CRUD代码生成器(仅有实体类、和控制器,极简代码实现通用crud),接口版本管理,接口文档管理,jwt,登录拦截器,文件上传,全局异常处理,全局响应格式包装等。代码精简,适用于新项目搭建,学习xbatis框架(一个mapper走天下,最优雅的ORM框架)、springboot4学习者使用。
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: v1.0
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 1
- **Created**: 2026-06-21
- **Last Updated**: 2026-07-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
SpringBoot4x Template
基于 Spring Boot 4.1 + X-Batis 的现代化 Java 后端快速开发脚手架
---
## 简介
**springboot4x-template** 是一个基于 Spring Boot 4.1 的 Java 后端快速开发脚手架,专为现代 Java 21 环境打造。项目采用 **X-Batis**(MyBatis 增强框架)单 Mapper 模式,集成 **Knife4j Next** API 文档、**Hutool JWT** 鉴权、**FreeMarker** 代码生成器等主流技术栈,开箱即用。
项目遵循"简洁、高效、可维护"的设计理念,提供了统一响应包装、全局异常处理、API 版本控制、多环境配置等企业级功能,帮助开发者快速搭建高质量的后端服务。
## 技术栈
| 技术 | 版本 | 说明 |
|------|------|------|
| Java | 21 | 使用虚拟线程(Virtual Threads) |
| Spring Boot | 4.1.0 | 基于 Spring Framework 7.x,Jakarta EE 11 |
| X-Batis | 1.10.5-M2-spring-boot4 | MyBatis 增强框架,单 Mapper 模式 |
| PostgreSQL | 16+ | 数据库 |
| Knife4j Next | 5.0.10 | API 文档,专为 Spring Boot 4.x 适配 |
| Hutool | 5.8.46 | 工具库(JWT、JSON 等) |
| FreeMarker | 2.3.32 | 代码生成模板引擎 |
| Lombok | - | 简化 Java Bean 编写 |
| HikariCP | - | 数据库连接池 |
## 核心特性
### 开箱即用的脚手架
- **统一响应包装** — 通过 `@ResponseWrapper` 注解标记,自动将返回值包装为统一格式的 `R` 响应体
- **全局异常处理** — 统一捕获业务异常、数据库异常(防止 SQL 注入信息泄露)、参数校验异常等,返回友好的错误消息
- **API 版本控制** — 基于 Spring Boot 4 原生路径式版本控制,支持 `v1/v2` 多版本共存
### 安全与鉴权
- **JWT 鉴权** — 基于 Hutool JWT 的 Token 鉴权体系,拦截器自动校验、解析并注入用户上下文
- **用户上下文** — 通过 `ThreadLocal` 持有当前登录用户信息(用户 ID、角色、部门等),方便业务层获取
### 高效开发
- **代码生成器** — 基于 X-Batis Generator + FreeMarker 模板,一键生成 Controller、Entity 代码(适配单 Mapper 模式)
- **文件上传** — 支持单文件/多文件/带元数据上传,自动按年月分子目录存储
- **虚拟线程** — 启用 Java 21 Virtual Threads,提升高并发下 I/O 密集型任务的吞吐量
### 运维友好
- **多环境配置** — 支持 dev/test/prod 三套环境,Maven 打包时通过 `-P` 参数自由切换
- **启动信息打印** — 启动时自动打印应用名、耗时、接口文档地址、当前配置环境
- **日志分级** — Logback 按 DEBUG/INFO/ERROR 分级输出到独立文件,自动清理历史日志
- **跨域支持** — 内置 CORS 配置,方便前后端分离开发
## 快速开始
### 环境要求
- JDK 21+
- Maven 3.9+
- PostgreSQL 16+
### 1. 初始化数据库
```sql
-- 创建数据库
CREATE DATABASE streamline_db;
-- 执行初始化脚本
psql -U postgres -d streamline_db -f sql/postgres_init.sql
```
> 初始化脚本包含系统用户表(`sys_user`)等基础表结构及示例数据。
### 2. 修改配置
根据本地环境修改数据库连接信息:
**开发环境** — `src/main/resources/application-dev.yaml`
```yaml
spring:
datasource:
url: jdbc:postgresql://localhost:5432/streamline_db
username: postgres
password: 你的密码
```
### 3. 启动项目
```bash
# 方式一:IDE 中直接运行 StreamlineServer.java
# 方式二:Maven 打包后运行
mvn clean package -P dev
java -jar target/springboot4x-template-2026-06-21.jar
```
### 4. 访问文档
启动后访问:http://localhost:8080/doc.html

## Maven 打包
项目内置三套环境配置,通过 `-P` 参数指定:
```bash
# 开发环境(默认)
mvn clean package -P dev
# 测试环境
mvn clean package -P test
# 生产环境
mvn clean package -P prod
```
打包后的 JAR 名称格式为 `springboot4x-template-yyyy-MM-dd.jar`(如 `springboot4x-template-2026-06-21.jar`)。
生产环境部署时,敏感信息(数据库密码、JWT 密钥等)通过环境变量注入:
```bash
export DB_PASSWORD=your_password
export JWT_SECRET=your_jwt_secret
java -jar springboot4x-template-2026-06-21.jar
```
## 项目结构
项目采用经典的 Spring Boot 分层架构,代码按功能模块组织在 `com.mijiupro.streamline` 包下:
- **common/** — 公共基础模块,包含注解、配置、异常、处理器、拦截器、统一响应体、工具类等通用组件
- **modules/** — 业务模块目录,按子系统分包(如 `sys` 系统管理),各模块内含 `controller`、`entity`、`mapper` 等子包
- **generationCode/** — 代码生成器入口,基于 X-Batis Generator 快速生成 CRUD 代码
```
springboot4x-template
├── sql/ # SQL 初始化脚本
│ └── postgres_init.sql
├── src/
│ ├── main/
│ │ ├── java/com/mijiupro/streamline/
│ │ │ ├── StreamlineServer.java # 启动类
│ │ │ ├── common/
│ │ │ │ ├── annotation/
│ │ │ │ │ └── ResponseWrapper.java # 统一响应包装注解
│ │ │ │ ├── config/
│ │ │ │ │ ├── WebConfig.java # Web 配置(拦截器、CORS、版本控制)
│ │ │ │ │ └── SpringDocConfig.java # Knife4j/SpringDoc 分组配置
│ │ │ │ ├── exception/
│ │ │ │ │ └── BusinessException.java # 业务异常
│ │ │ │ ├── handler/
│ │ │ │ │ ├── GlobalExceptionHandler.java # 全局异常处理
│ │ │ │ │ └── ResponseWrapperHandler.java # 响应包装处理
│ │ │ │ ├── interceptor/
│ │ │ │ │ └── LoginInterceptor.java # 登录拦截器
│ │ │ │ ├── result/
│ │ │ │ │ ├── R.java # 统一响应体
│ │ │ │ │ └── Page.java # 分页封装
│ │ │ │ ├── upload/
│ │ │ │ │ └── FileUploadController.java # 文件上传接口
│ │ │ │ └── util/
│ │ │ │ ├── JwtUtils.java # JWT 工具类
│ │ │ │ ├── StartupLogger.java # 启动信息打印
│ │ │ │ └── context/
│ │ │ │ ├── LoginUser.java # 登录用户 POJO
│ │ │ │ └── UserContextHolder.java # 用户上下文持有者
│ │ │ ├── generationCode/
│ │ │ │ └── BaseCodeGen.java # 代码生成器入口
│ │ │ └── modules/
│ │ │ └── sys/
│ │ │ ├── controller/
│ │ │ │ └── SysUserController.java # 系统用户示例控制器
│ │ │ ├── entity/
│ │ │ │ └── SysUser.java # 系统用户实体
│ │ │ └── mapper/
│ │ │ └── MybatisBasicMapper.java # 单 Mapper 接口
│ │ └── resources/
│ │ ├── application.yaml # 主配置文件
│ │ ├── application-dev.yaml # 开发环境
│ │ ├── application-test.yaml # 测试环境
│ │ ├── application-prod.yaml # 生产环境
│ │ ├── logback.xml # 日志配置
│ │ └── templates/ # 代码生成模板
│ │ ├── action.ftl # Controller 模板
│ │ ├── entity.ftl # 实体模板
│ │ ├── service.ftl # Service 接口模板
│ │ ├── service.impl.ftl # Service 实现模板
│ │ ├── dao.ftl # DAO 接口模板
│ │ ├── dao.impl.ftl # DAO 实现模板
│ │ ├── mapper.ftl # Mapper 接口模板
│ │ ├── mapper.xml.ftl # Mapper XML 模板
│ │ └── TEMPLATE_DATA_REFERENCE.md # 模板参数参考
│ └── test/
│ └── java/ # 测试代码
├── .gitignore
├── .gitattributes
├── pom.xml
└── README.md
```
## API 文档
项目集成了 Knife4j Next(基于 SpringDoc 4.x),启动后访问:
- **Knife4j UI**: http://localhost:8080/doc.html
- **OpenAPI JSON**: http://localhost:8080/v3/api-docs
接口按 API 版本分组展示:
- **v1 版本** — 稳定版接口
- **v2 版本** — 新版实验接口
### 文件上传接口
| 接口 | 方法 | 说明 |
|------|------|------|
| `/api/v1/upload/file` | POST | 单文件上传 |
| `/api/v1/upload/files` | POST | 多文件上传 |
| `/api/v1/upload/fileWithMeta` | POST | 带元数据的单文件上传 |
| `/api/v1/upload/filesWithMeta` | POST | 带元数据的多文件上传 |
### 系统用户接口
| 接口 | 方法 | 版本 | 说明 |
|------|------|------|------|
| `/api/v1/sysUser/page` | GET | v1 | 分页查询 |
| `/api/v1/sysUser/all` | GET | v1 | 查询所有 |
| `/api/v1/sysUser/all` | GET | v2 | 查询所有(v2 版本) |
| `/api/v1/sysUser/save` | POST | v1 | 新增用户 |
| `/api/v1/sysUser/update` | POST | v1 | 修改用户 |
| `/api/v1/sysUser/delete` | DELETE | v1 | 删除用户 |
## 许可证
本项目基于 [MIT License](LICENSE) 开源。
## 作者
- **mijiupro** — 项目创建者
---
如果你觉得这个项目有帮助,欢迎 Star ⭐