SpringBoot

浏览该分类下的所有文章

Spring Boot AOP架构落地与最佳实践

Spring Boot AOP通过切面把日志、性能监控、权限校验等横切关注点模块化,提升代码可维护性。文章先介绍 AOP 基础概念及 Spring Boot 的自动配置方式,随后给出日志、性能、授权等实战切面实现示例,并演示自定义注解、ThreadLocal、CGLIB 代理等技术细节。最佳实践包括按功能划分切面目录、使用 @Order 控制执行顺序、优化切点表达式、防止性能损耗以及统一异常处理和缓存切面。最后结合分布式链路追踪和异步执行,提供在生产环境中落地 AOP 的完整方案。

使用Spring Boot整合Mybatis-Plus实现数据库的增删查改

文章详细演示了在 Spring Boot 项目中使用 Mybatis‑Plus 完成增删改查的全过程。首先在 MySQL 中创建 `tbl_employee` 表并插入示例数据;随后初始化 Spring Boot 项目并在 `pom.xml` 中加入 Mybatis‑Plus、MySQL、Druid 等依赖。将数据库连接配置写入 `application.yml`,使用 Lombok 编写实体类并通过 `@TableName`、`@TableId`、`@Version` 注解映射表结构。定义继承 `BaseMapper` 的 Mapper 接口并在启动类上使用 `@MapperScan` 指定扫描路径。最后提供 JUnit 测试代码,分别演示 `selectList`、`insert`、`update`、`delete` 等 CRUD 操作的使用方法,验证 Mybatis‑Plus 与 Spring Boot 的无缝集成。

SpringBoot开发中的十大常见问题与解决方案

本文围绕SpringBoot 开发中常见的十类问题提供实战解决方案,重点包括:① 多环境配置的 profile 与 @ConfigurationProperties 正确写法,防止加载顺序混乱;② 自动装配冲突、循环依赖及多实现注入的 @Lazy、@Primary、@Qualifier 用法;③ @Transactional 生效条件、事务传播属性及事务管理器配置;④ Hikari 连接池参数、泄漏检测与监控端点的设置;⑤ Redis 缓存的穿透、击穿、雪崩和一致性处理,示例 cacheable、空值缓存、分布式锁和 @CacheEvict。文章通过完整代码示例,帮助开发者快速定位并规避这些坑,提高 SpringBoot 项目可靠性与性能。

SpringBoot整合阿里云实现短信验证码功能

本文详述在 Spring Boot 项目中集成阿里云短信服务并结合 Redis 实现验证码功能的完整步骤。先在 pom.xml 引入阿里云 SDK、Redis 与工具类依赖,随后在 application.yml 配置阿里云账号、短信模板、Redis 连接及验证码参数(有效期、长度、重发间隔)。文中提供 RedisTemplate 与阿里云短信 Client 的 Java 配置类,定义发送与校验验证码的 Service 接口及实现。实现逻辑包括手机号校验、发送频率限制、随机验证码生成、将验证码存入带过期时间的 Redis、调用阿里云 API 发送短信,以及校验时的错误次数防暴力破解、验证码失效处理和一次性删除。整体方案实现了高效、可控且安全的短信验证码系统。

@EnableWebMvc:Spring MVC定制的双刃剑

@EnableWebMvc是Spring MVC的核心开关,标志开发者接管所有MVC配置。它会覆盖Spring Boot的自动配置,导致静态资源、视图解析、消息转换、CORS等功能失效,常见表现为404、JSON 序列化错误或跨域请求被拦。解决方案是:在 Spring Boot 项目中尽量去掉 @EnableWebMvc,仅实现 WebMvcConfigurer;若必须使用,则必须手动配置资源处理、默认 Servlet、消息转换器、跨域映射等关键组件。文章还给出传统 Spring MVC 与文件上传的完整配置示例,并提供使用 @EnableWebMvc 的场景判断表、配置检查清单以及调试方式,帮助开发者在需要完全自定义时安全使用该注解。

SpringBoot中ThreadLocal的妙用:原理、实战与避坑指南

文章介绍了 ThreadLocal 在 SpringBoot 中的原理与实战。ThreadLocal 通过 ThreadLocalMap 为每条线程提供私有存储,键采用弱引用避免泄漏,但若不在 finally 中调用 remove(),值仍会残留导致内存泄漏。示例展示在 Filter/Interceptor 中设置用户信息或 TraceID,业务层可直接通过封装的 Holder 获取,省去层层传参。随后列出四大常见坑:①忘记 remove 导致内存增长;②子线程无法继承导致上下文缺失;③初始化时空指针;④事务/异步场景上下文丢失。对应解决方案包括:在 finally 中强制 remove、使用 InheritableThreadLocal 或阿里 TransmittableThreadLocal、懒加载或显式传参。最后强调使用原则——及时清理、限定作用域、在复杂并发场景选用合适工具,才能安全高效地利用 ThreadLocal。

基于Spring Boot + MyBatis-Plus + Thymeleaf的评论管理系统深度解析

本文围绕基于 Spring Boot、MyBatis‑Plus 与 Thymeleaf 的评论管理系统展开深度解析。首先阐述系统采用前后端分离、模板渲染相结合的架构,并选用 Spring Boot、MyBatis‑Plus、Redis、Bootstrap5 等技术以提升开发效率和性能。随后详细说明后端实现,包括分页查询(LambdaQueryWrapper 动态条件、PaginationInnerInterceptor 插件原理)、批量操作(删除、审核状态修改)及事务、幂等性保证。接着探讨缓存策略:评论变更后全库或按键前缀刷新 Redis,并提出懒加载与预加载方案。最后介绍前端响应式布局(表格/卡片切换、固定列宽、Flex 布局)及交互细节(内容展开、批量选择),实现 PC 与移动端的良好用户体验。

留言板性能优化:从全量递归到按需加载的实践

原博客留言板一次性递归查询全部评论,导致数据库压力大、页面响应慢、资源浪费。优化思路改为首次只加载顶层评论,新增“展开回复”按钮,用户点击后通过 AJAX 异步获取该评论的完整回复树并平铺渲染。后端增加 replyCount 字段,仅查询顶层并递归返回子树,提供 `/comments/replies/tree` 接口;前端改造 HTML、JS 实现懒加载、展开/收起、平铺展示并优化样式。JMeter 测试显示平均响应时间从 1850 ms 降至 320 ms,查询时间降 97%,传输量降 93%,内存峰值降 82%,页面加载提升约5 倍,用户体验显著改善。

将Spring Boot项目部署到阿里云CentOS7并设置关闭命令行终端项目不停止运行

本文介绍了在阿里云 CentOS7 上部署 Spring Boot 项目并实现关闭终端后仍保持运行的完整流程:先在 yml 中更改数据库 IP,执行 clean‑package 打包得到 jar;登录云服务器,创建目录并上传 jar;编写 startup.sh 脚本,使用 `nohup java -jar /myworkspace/blog.jar --server.port=8081 &` 启动并将其设为可执行;通过 `chmod -R 777` 授权后运行脚本,使用 `tail -f nohup.out` 检查日志确认启动;提供了 Nginx HTTPS 配置参考;最后给出查询和 kill 进程停止 Spring Boot 的命令。

SpringBoot结合ip2region实现博客评论显示IP属地

本文介绍在Spring Boot博客系统中使用ip2region实现评论IP属地显示的完整方案。通过IpParseUtil类的getIpAddr获取请求IP,再用parse方法解析为“国家|区域|省份|城市|ISP”或自定义字段列表。将解析结果写入Comment实体的location字段,在前端页面读取并展示。文章还列出所需技术栈(Spring Boot、MySQL、HTML/CSS/JS、ip2region、Commons IO、Lombok)以及关键代码实现和集成步骤,帮助开发者快速为评论添加地理位置信息,提高互动体验。

SpringBoot+Elasticsearch按日期实现动态创建索引

文章介绍了在 SpringBoot 中通过 @Document 的 EL 表达式实现 Elasticsearch 按日期动态创建索引的完整方案。核心思路是把索引后缀(如 yyyy_MM_dd)封装为 Bean(esIndex),并在每天零点的定时任务中销毁旧 Bean、重新注册新值,同时手动调用 ElasticsearchRestTemplate 创建索引,以保证 shards、replicas 等配置不丢失。实体类需声明 createIndex = false,避免自动创建导致参数缺失;示例代码包括配置类、实体、Repository 与 Controller,演示了定时更新索引和保存数据后在 Kibana 中观察新索引的效果。

SpringBoot接口加密解密工具

本文介绍了一个基于 SpringBoot、通过注解实现的接口加密解密工具。工具支持 Base64、DES、3DES、AES、RSA 等对称/非对称算法以及 MD5 加密,只需在接口上添加 @ZxfEncryptResponse 或 @ZxfDecryptRequest 并指定 AlgorithmType 即可完成响应加密或请求解密。使用步骤包括拉取代码、打包成 jar、在项目中引入依赖并在配置文件中配置相应的密钥(DES、3DES、AES、RSA 公私钥),提供了一套可直接使用的密钥示例以及示例代码。项目源码已开源于 Gitee。