SpringBoot_05 复盘总结笔记
一、导学与基础概念
为什么学习 SpringBoot3 + Vue3?
后端主流:SpringBoot3 是企业级开发事实标准框架
前端趋势:Vue3 是企业招聘中最普遍的前端技术要求
能力目标:掌握全栈开发后台管理系统的能力
必备工具链
| 工具 | 作用 | 版本要求 |
|---|---|---|
| JDK | Java 开发环境 | 17+ |
| IDEA | 集成开发环境 | - |
| Node.js | 前端运行环境 | LTS |
| Maven/Gradle | 依赖管理工具 | - |
常用 Starter
spring-boot-starter-web:Web 开发spring-boot-starter-data-jpa:数据访问spring-boot-starter-test:测试支持
二、工程结构与配置
推荐目录结构
text
src/main/java
├── com.xxx.demo
│ ├── controller
│ ├── service
│ ├── mapper
│ ├── entity
│ ├── config
│ └── DemoApplication.java
src/main/resources
├── application.yml
└── mapper/*.xml
配置文件优先级
命令行参数
环境变量
application.yml
application.properties
YAML 配置示例
yaml
server:
port: 8081
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: 123456
多环境配置
yaml
application.yml
spring:
profiles:
active: dev
application-dev.yml
logging:
level:
root: DEBUG
application-prod.yml
server:
port: 8080
三、核心开发技巧
Bean 管理
三种注册方式:
@Component/@Service/@Controller配置类 +
@Beanjava
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserService();
}
}条件注册:
@Conditional系列注解
整合 MyBatis
关键步骤:
添加依赖
xml
org.mybatis.spring.boot mybatis-spring-boot-starter配置 Mapper 接口
java
@Mapper
public interface UserMapper {
User selectById(Long id);
}XML 文件位置:
resources/mapper/*.xml
四、用户管理模块实战
JWT 认证实现
// 生成 TokenpublicStringgenerateToken(UserDetailsuserDetails){returnJwts.builder().setSubject(userDetails.getUsername()).setIssuedAt(newDate()).setExpiration(newDate(System.currentTimeMillis()+3600000)).signWith(SignatureAlgorithm.HS512,SECRET_KEY).compact();}// 拦截器验证publicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler){Stringtoken=request.getHeader("Authorization");// 验证逻辑...}ThreadLocal 优化
publicclassUserContext{privatestaticfinalThreadLocal<User>currentUser=newThreadLocal<>();publicstaticvoidsetCurrentUser(Useruser){currentUser.set(user);}publicstaticUsergetCurrentUser(){returncurrentUser.get();}publicstaticvoidclear(){currentUser.remove();}}五、业务模块开发
参数校验
分组校验示例:
publicinterfaceAdd{}publicinterfaceUpdate{}publicclassCategoryDTO{@Null(groups=Add.class)@NotNull(groups=Update.class)privateLongid;@NotBlank(groups={Add.class,Update.class})privateStringname;}@PostMapping("/category")publicResultaddCategory(@Validated(Add.class)@RequestBodyCategoryDTOdto){// 业务逻辑}### 文件上传 java@PostMapping("/upload")publicStringupload(@RequestParam("file")MultipartFilefile){StringoriginalFilename=file.getOriginalFilename();Stringext=originalFilename.substring(originalFilename.lastIndexOf("."));StringfileName=UUID.randomUUID()+ext;Filedest=newFile(UPLOAD_DIR+fileName);file.transferTo(dest);return"/upload/"+fileName;}六、高级特性
Redis 集成优化
登录优化流程:
- 登录成功后存储 token 到 Redis
stringRedisTemplate.opsForValue().set(token,username,expireTime,TimeUnit.MILLISECONDS);拦截器增加 Redis 校验
修改密码/退出时删除 Redis token
自定义 Starter
结构:
core:功能实现autoconfigure:自动装配
自动配置类:
@Configuration@ConditionalOnProperty(name="my.feature.enabled",matchIfMissing=true)publicclassMyAutoConfig{@BeanpublicMyServicemyService(){returnnewMyService();}}七、部署与优化
部署流程
打包:
mvn clean package运行:
nohup java -jar app.jar &配置 Nginx 反向代理
性能优化建议
使用连接池(HikariCP)
启用 Gzip 压缩
合理配置线程池
启用缓存(Redis/Ehcache)
监控:Spring Boot Actuator + Prometheus
八、避坑指南
常见问题解决
端口冲突:修改
server.port组件扫描失败:确保启动类在根包
配置读取问题:
@ConfigurationProperties需要@ComponentYAML 缩进必须正确
MyBatis 映射问题:
XML 文件位置正确
添加
@Mapper或@MapperScan
文件上传大小限制:
yaml
spring:
servlet:
multipart:
max-file-size: 10MB
max-request-size: 10MB
最佳实践:开发时开启
debug=true查看自动配置报告,定期检查依赖版本兼容性
