当前位置: 首页 > news >正文

SpringBoot_05 复盘总结笔记

一、导学与基础概念

为什么学习 SpringBoot3 + Vue3?

  • 后端主流:SpringBoot3 是企业级开发事实标准框架

  • 前端趋势:Vue3 是企业招聘中最普遍的前端技术要求

  • 能力目标:掌握全栈开发后台管理系统的能力

必备工具链

工具作用版本要求
JDKJava 开发环境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

配置文件优先级

  1. 命令行参数

  2. 环境变量

  3. application.yml

  4. 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 管理

三种注册方式:

  1. @Component/@Service/@Controller

  2. 配置类 +@Bean

    java

    @Configuration
    public class AppConfig {
    @Bean
    public UserService userService() {
    return new UserService();
    }
    }

  3. 条件注册:@Conditional系列注解

整合 MyBatis

关键步骤:

  1. 添加依赖

    xml

    org.mybatis.spring.boot mybatis-spring-boot-starter
  2. 配置 Mapper 接口

    java

    @Mapper
    public interface UserMapper {
    User selectById(Long id);
    }

  3. 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 集成优化

登录优化流程:

  1. 登录成功后存储 token 到 Redis
stringRedisTemplate.opsForValue().set(token,username,expireTime,TimeUnit.MILLISECONDS);
  1. 拦截器增加 Redis 校验

  2. 修改密码/退出时删除 Redis token

自定义 Starter

结构:

  • core:功能实现

  • autoconfigure:自动装配

自动配置类:

@Configuration@ConditionalOnProperty(name="my.feature.enabled",matchIfMissing=true)publicclassMyAutoConfig{@BeanpublicMyServicemyService(){returnnewMyService();}}

七、部署与优化

部署流程

  1. 打包:mvn clean package

  2. 运行:nohup java -jar app.jar &

  3. 配置 Nginx 反向代理

性能优化建议

  1. 使用连接池(HikariCP)

  2. 启用 Gzip 压缩

  3. 合理配置线程池

  4. 启用缓存(Redis/Ehcache)

  5. 监控:Spring Boot Actuator + Prometheus

八、避坑指南

常见问题解决

  1. 端口冲突:修改server.port

  2. 组件扫描失败:确保启动类在根包

  3. 配置读取问题

    • @ConfigurationProperties需要@Component

    • YAML 缩进必须正确

  4. MyBatis 映射问题

    • XML 文件位置正确

    • 添加@Mapper@MapperScan

  5. 文件上传大小限制

    yaml

    spring:
    servlet:
    multipart:
    max-file-size: 10MB
    max-request-size: 10MB

最佳实践:开发时开启debug=true查看自动配置报告,定期检查依赖版本兼容性

http://www.cnnetsun.cn/news/1339970.html

相关文章:

  • ChatGPT读文献:技术原理与高效科研实践指南
  • 安防监控系统季度维护清单(含红外报警+门禁联动):附可打印检查表
  • MGeo地址结构化模型企业应用:挪车报警系统中的精准定位提效实践
  • 跨平台算命APP源码开发:UniApp框架与微信小程序双端部署的命理服务解决方案
  • Java基础语法学习与应用
  • 2026年备考软考有什么学习刷题的APP?
  • 2026年最新成人零基础电子鼓避坑指南:家用静音不扰民
  • Git误操作急救手册:拯救代码全攻略
  • 破除医疗流程图协作壁垒:drawio-desktop的格式桥接技术与实践指南
  • 怎么选一家靠谱的密度板运营中心 凯跃木业
  • 收藏!小白程序员快速入门:AI Agent开发核心知识体系梳理
  • python+Ai技术的旅游攻略分享平台_
  • Ollama部署本地大模型:translategemma-12b-it在国际学校双语教材智能批改中的应用
  • Qwen2-VL-2B-Instruct开发利器:IntelliJ IDEA插件开发与模型API调试技巧
  • 单模 vs 多模光纤:如何根据传输需求选择合适的光纤类型?
  • Neo4j实战-跨版本数据迁移全流程解析
  • 机械毕业设计选题指南:从工程问题到技术实现的选题方法论
  • Video2X开源工具Vulkan初始化失败终极解决方案
  • SUPER COLORIZER与传统算法对比:基于LSTM的色彩预测与扩散模型色彩生成
  • Phi-3-Mini-128K入门必看:streaming=True对长文本生成体验的提升
  • Baichuan-M2-32B医疗大模型部署实战:基于vLLM的GPTQ-Int4量化配置指南
  • Redis安全配置实战:如何用protected-mode和bind保护你的数据库(附常见误区解析)
  • k3s+TailScale(伪)一键部署脚本
  • 智慧教室解决方案:口罩检测+考勤系统的低代码集成
  • 专业级英雄联盟皮肤切换工具R3nzSkin实战指南:从源码编译到安全配置
  • 别让AI“失忆“!OpenClaw三步打造靠谱的长期记忆架构
  • 桩网储光融合:充电桩行业的未来十年,看这十大关键判断
  • 基于三菱PLC与三菱触摸屏的水塔水位联机仿真:探索自动化控制的乐趣
  • Qwen-Image-Edit与Python集成:自动化图像处理流水线搭建
  • PasteMD与Excel深度集成:智能表格转换实战