SpringBoot_05 复盘总结笔记

SpringBoot_05 复盘总结笔记 一、导学与基础概念为什么学习 SpringBoot3 Vue3后端主流SpringBoot3 是企业级开发事实标准框架前端趋势Vue3 是企业招聘中最普遍的前端技术要求能力目标掌握全栈开发后台管理系统的能力必备工具链工具作用版本要求JDKJava 开发环境17IDEA集成开发环境-Node.js前端运行环境LTSMaven/Gradle依赖管理工具-常用 Starterspring-boot-starter-webWeb 开发spring-boot-starter-data-jpa数据访问spring-boot-starter-test测试支持二、工程结构与配置推荐目录结构textsrc/main/java├── com.xxx.demo│ ├── controller│ ├── service│ ├── mapper│ ├── entity│ ├── config│ └── DemoApplication.javasrc/main/resources├── application.yml└── mapper/*.xml配置文件优先级命令行参数环境变量application.ymlapplication.propertiesYAML 配置示例yamlserver:port: 8081spring:datasource:url: jdbc:mysql://localhost:3306/testusername: rootpassword: 123456多环境配置yamlapplication.ymlspring:profiles:active: devapplication-dev.ymllogging:level:root: DEBUGapplication-prod.ymlserver:port: 8080三、核心开发技巧Bean 管理三种注册方式Component/Service/Controller配置类 BeanjavaConfigurationpublic class AppConfig {Beanpublic UserService userService() {return new UserService();}}条件注册Conditional系列注解整合 MyBatis关键步骤添加依赖xmlorg.mybatis.spring.boot mybatis-spring-boot-starter配置 Mapper 接口javaMapperpublic 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){Stringtokenrequest.getHeader(Authorization);// 验证逻辑...}ThreadLocal 优化publicclassUserContext{privatestaticfinalThreadLocalUsercurrentUsernewThreadLocal();publicstaticvoidsetCurrentUser(Useruser){currentUser.set(user);}publicstaticUsergetCurrentUser(){returncurrentUser.get();}publicstaticvoidclear(){currentUser.remove();}}五、业务模块开发参数校验分组校验示例publicinterfaceAdd{}publicinterfaceUpdate{}publicclassCategoryDTO{Null(groupsAdd.class)NotNull(groupsUpdate.class)privateLongid;NotBlank(groups{Add.class,Update.class})privateStringname;}PostMapping(/category)publicResultaddCategory(Validated(Add.class)RequestBodyCategoryDTOdto){// 业务逻辑}### 文件上传 javaPostMapping(/upload)publicStringupload(RequestParam(file)MultipartFilefile){StringoriginalFilenamefile.getOriginalFilename();StringextoriginalFilename.substring(originalFilename.lastIndexOf(.));StringfileNameUUID.randomUUID()ext;FiledestnewFile(UPLOAD_DIRfileName);file.transferTo(dest);return/upload/fileName;}六、高级特性Redis 集成优化登录优化流程登录成功后存储 token 到 RedisstringRedisTemplate.opsForValue().set(token,username,expireTime,TimeUnit.MILLISECONDS);拦截器增加 Redis 校验修改密码/退出时删除 Redis token自定义 Starter结构core功能实现autoconfigure自动装配自动配置类ConfigurationConditionalOnProperty(namemy.feature.enabled,matchIfMissingtrue)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文件上传大小限制yamlspring:servlet:multipart:max-file-size: 10MBmax-request-size: 10MB最佳实践开发时开启debugtrue查看自动配置报告定期检查依赖版本兼容性