一、前言
在现代Java企业开发中,SpringBoot已成为事实上的标准框架。一个良好的脚手架能够显著提升开发效率,规范团队协作,避免重复造轮子。本文将详细介绍如何从零搭建一个功能完善、结构清晰的SpringBoot脚手架,涵盖系统架构设计选型、项目结构设计、基础配置、通用功能集成、常用工具类、多环境配置等关键环节。
脚手架搭建过程中,每一个关键步骤完成后,请务必启动项目进行验证,确保配置正确。若遇到问题,建议及时排查定位,以便快速解决。
二、系统架构设计
三、项目技术栈概览
| 技术组件 | GroupId / ArtifactId | 版本 |
|---|---|---|
| JDK | - | 1.8 |
| Spring Boot | org.springframework.boot | 2.6.13 |
四、项目结构设计
Spring Boot 项目目录结构最佳实践:科学组织Java类文件
确定好目录结构的方案后,可使用cmd命令一次性创建好所有的目录
五、YML配置
这里提供基础配置模板供参考,请根据实际项目需求进行调整。除上述配置外,你可能还需要配置Tomcat、MyBatis/MyBatis Plus、文件上传大小限制等功能,请结合项目情况酌情增减。
1. 基础配置
在application.yml中配置基础参数:
yaml
# 应用服务 WEB 访问端口
server:
# 默认8080
port: 8080
2. 数据源配置
数据库(redis + mysql主从)配置示例(可在环境特定配置文件中,例如application-dev.yml):
yaml
# 数据源配置
spring:
# redis 配置
redis:
# 地址
host: 127.0.0.1
# 端口,默认为6379
port: 6379
# 数据库索引
database: 0
# 密码
password:
# 连接超时时间
timeout: 10s
lettuce:
pool:
# 连接池中的最小空闲连接
min-idle: 0
# 连接池中的最大空闲连接
max-idle: 8
# 连接池的最大数据库连接数
max-active: 8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1ms
# 数据库配置
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
druid:
# 主库数据源
master:
url: jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: 123456
# 从库数据源
slave:
# 从数据源开关/默认关闭
enabled: true
url: jdbc:mysql://127.0.0.1:3306/demo2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: 123456
# ========== 连接池参数(根据生产环境负载调整) ==========
# 初始连接数
initialSize: 5
# 最小连接池数量
minIdle: 10
# 最大连接池数量
maxActive: 50
# 配置获取连接等待超时的时间
maxWait: 30000
# ========== 连接有效性检查 ==========
# 配置连接超时时间
connectTimeout: 30000
# 配置网络超时时间
socketTimeout: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
# 配置一个连接在池中最大生存的时间,单位是毫秒
maxEvictableIdleTimeMillis: 900000
# 配置检测连接是否有效
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
# 生产环境建议开启
testOnBorrow: true
testOnReturn: false
# ========== 监控配置 ==========
# Web请求统计
webStatFilter:
# 监控Web请求的过滤器(生产环境建议关闭,减少开销)
enabled: false
# Web监控页面
statViewServlet:
# Web监控页面开关(生产环境基于安全考虑建议关闭)
enabled: false
# 设置白名单,不填则允许所有访问
allow:
url-pattern: /druid/*
# 控制台管理用户名和密码
login-username: krpq
login-password: 123456
filter:
# SQL性能监控
stat:
# 生产环境建议保持开启状态
enabled: true
# 慢SQL记录
log-slow-sql: true
# 慢SQL阈值(单位:毫秒)
slow-sql-millis: 2000
# 合并相同SQL统计
merge-sql: true
# SQL防火墙
wall:
enabled: true
config:
# 允许多语句执行(生产环境建议关闭)
multi-statement-allow: false
# 还可以配置下面这些更严格的规则,各位按需选取即可
# 禁止drop table
# drop-table-allow: false
# 禁止truncate
# truncate-allow: false
监控建议
| 环境 | Web监控页面 | SQL监控 | 慢SQL日志 | 防火墙 |
|---|---|---|---|---|
| 开发环境 | ✅ 开启 | ✅ 开启 | ✅ 开启 | ✅ 开启 |
| 测试环境 | ⚠️ 内网访问 | ✅ 开启 | ✅ 开启 | ✅ 开启 |
| 生产环境 | ❌ 关闭 | ✅ 开启 | ✅ 开启 | ✅ 严格配置 |
六、通用返回结构设计
SpringBoot响应封装:Graceful Response vs 自定义通用响应类选型指南
七、常见功能组件
1. 日志打印
SpringBoot 日志详解:SLF4J门面模式、级别控制与Logback实战配置
推荐使用
ogback-spring.xml+lombok依赖的方案,自动适配Maven多环境配置,通过读取application.yml的spring: profiles: active属性值,自动控制日志的输出级别和内容。
2. 跨域支持
Spring Boot 2.6.13 + Java 8 跨域配置
开发阶段统一允许所有来源,上线前细化规则。
3. 参数校验
springboot中使用Hibernate-Validation
八、常用工具类
1. 分布式ID生成器(雪花算法)
MySQL AUTO_INCREMENT缓存机制深度解析与优化实践
参考章节《四、使用雪花算法规避AUTO_INCREMENT问题》
2. Hutool
Hutool是一个功能丰富且易用的Java工具库,封装的工具涵盖了字符串、数字、集合、编码、日期、文件、IO、加密、数据库JDBC、JSON、HTTP客户端等一系列操作。
九、体验优化
1. 热部署
springboot学习四:Spring Boot profile多环境配置、devtools热部署
参考章节《五、Spring Boot 整合 devtools热部署》
还可以增加Swagger接口文档、代码生成器等功能
十、部署前优化
1. 多环境配置
推荐使用
多文件yml配置+Maven多环境控制的方案
还可以增加接口限流等功能
十一、知识拓展
十二、总结
本文详细介绍了如何从零搭建一个功能完善的SpringBoot脚手架,通过这个脚手架,开发者可以快速启动新项目,专注于业务逻辑开发而非基础设施搭建。
在实际项目中,还需要根据具体需求进行调整和扩展,例如:
- 集成消息队列(RabbitMQ/Kafka)
- 添加分布式锁实现
- 集成分布式缓存(Redis Cluster)
- 添加监控(Prometheus + Grafana)
本文档仍在不断完善中,欢迎各位积极反馈与建议。
十三、附:参考文章致谢
本文在撰写过程中参考并汲取了以下文章的精华,特此致谢:
如何搭建漂亮的 SpringBoot 脚手架?