Spring Boot与MyBatis Plus开发问题解决方案集锦
1. 项目概述hhz的问题笔记这个项目名称看似简单却蕴含着一个开发者日常工作的真实写照。作为一名常年与各种开发工具和技术栈打交道的程序员我深知在开发过程中会遇到无数大大小小的问题。这些问题笔记往往散落在各个角落——有的记在IDE的便签里有的写在手机备忘录中甚至有些只存在于模糊的记忆里。这个项目本质上是一个开发者的问题解决方案库主要围绕以下几个核心技术栈开发环境Docker Desktop、IntelliJ IDEA后端框架Spring Boot数据库操作MyBatis PlusAPI开发与调用提示好的问题笔记应该具备可检索性、可复现性和可扩展性而不仅仅是零散的记录。2. 开发环境配置与问题解决2.1 Docker Desktop中文设置很多开发者第一次安装Docker Desktop时都会遇到界面语言问题。最新版本的Docker Desktop已经支持中文界面设置方法如下打开Docker Desktop点击右上角设置图标(⚙️)选择Appearance选项卡在Language下拉菜单中选择简体中文重启Docker Desktop生效常见问题如果语言选项中没有中文可能是版本较旧建议升级到最新版修改安装路径到D盘的方法卸载后重新安装时选择自定义路径2.2 IntelliJ IDEA高效配置IDEA作为Java开发的主力IDE合理配置能极大提升效率安装注意事项建议从官网下载正式版而非破解版避免安全风险安装时注意勾选Add launchers dir to the PATH以便命令行使用2024版激活建议使用教育邮箱申请免费授权必备插件推荐MyBatisXMyBatis Plus开发辅助REST ClientAPI测试工具Chinese Language Pack官方中文语言包3. Spring Boot开发核心问题3.1 项目创建与自动装配使用IDEA创建Spring Boot项目的正确姿势File - New - Project - Spring Initializr关键选项建议选择Spring Boot 3.x版本与2.x有显著差异依赖选择Web、MyBatis Plus、Lombok等打包方式根据需求选择Jar或War自动装配原理要点SpringBootApplication组合了Configuration、EnableAutoConfiguration和ComponentScan自动配置通过spring.factories文件实现条件注解(Conditional)控制配置类的加载3.2 事务管理实践Spring Boot事务常见误区// 错误示例同类方法调用事务失效 public void methodA() { methodB(); // 事务不会生效 } Transactional public void methodB() { // 数据库操作 }正确做法将事务方法放到另一个Bean中使用AopContext.currentProxy()获取代理对象默认自动提交行为可通过spring.datasource.hikari.auto-commitfalse修改4. MyBatis Plus实战技巧4.1 批量操作性能对比removeBatchByIds与removeByIds的区别特性removeByIdsremoveBatchByIds实现方式单条DELETE语句批量DELETE语句性能较差多次网络IO较好一次网络IO事务默认自动提交建议手动事务适用场景少量ID删除大批量ID删除注意批量操作时要注意数据库连接池的最大连接数配置避免连接耗尽。4.2 复杂查询实现连表分页查询示例public IPageUserVO selectUserPage(PageUserVO page, UserQuery query) { return userMapper.selectPageVo(page, query); } // XML配置 select idselectPageVo resultTypecom.example.vo.UserVO SELECT u.*, d.dept_name FROM user u LEFT JOIN department d ON u.dept_id d.id WHERE u.status #{query.status} ORDER BY u.create_time DESC /select5. API开发与调用问题5.1 常见API错误处理典型的400错误及解决方案type must be in [enabled, disabled, auto]检查传入的type参数值是否符合API文档要求实现参数校验逻辑GetMapping(/status) public Result getStatus(RequestParam Pattern(regexp enabled|disabled|auto) String type) { // 业务逻辑 }maximum context length is 1048576 tokens减少请求内容长度分批处理大数据量请求对于DeepSeek等AI API确认使用正确的模型名称5.2 API调用最佳实践稳定API调用的关键点重试机制对于瞬时故障(ECONNRESET)实现指数退避重试超时设置合理配置连接超时和读取超时熔断降级使用Resilience4j或Hystrix实现熔断日志记录记录请求和响应用于问题排查// 使用FeignClient的配置示例 FeignClient(name deepseek-api, url ${api.deepseek.url}, configuration FeignConfig.class) public interface DeepSeekClient { PostMapping(/v4/completions) CompletionResponse complete(RequestBody CompletionRequest request); } // 配置类 public class FeignConfig { Bean public Retryer retryer() { return new Retryer.Default(1000, 5000, 3); } }6. 开发环境深度优化6.1 Docker Desktop进阶配置修改镜像源加速国内访问打开Docker Desktop设置选择Docker Engine选项卡修改配置为{ registry-mirrors: [ https://hub-mirror.c.163.com, https://mirror.baidubce.com ] }应用并重启清理缓存释放空间# Windows下清理Docker缓存 docker system prune --all --volumes6.2 IDEA性能调优内存配置调整idea64.exe.vmoptions-Xms2048m -Xmx4096m -XX:ReservedCodeCacheSize512m其他优化建议关闭不必要的代码检查定期清理缓存(File - Invalidate Caches)使用Power Save Mode在笔记本上节省电量7. 问题笔记系统设计建议7.1 笔记分类体系建议的问题分类维度按技术栈Docker/IDEA/Spring Boot等按问题类型配置问题/性能问题/兼容性问题按解决状态已解决/待解决/已知问题7.2 高效检索方案实现快速检索的技巧使用统一的前缀标记如[Docker][网络]如何修改DNS为每个问题添加关键词标签维护一个索引文件或数据库表考虑使用全文检索工具如Elasticsearch示例Markdown笔记结构## [Docker][网络]容器无法访问外网 **环境** - Docker Desktop 4.15.0 - Windows 11 **现象** 容器内ping不通外网域名 **解决方案** 1. 修改daemon.json添加DNS配置 2. 重启Docker服务 **相关链接** - [官方文档](https://docs.docker.com/)8. 高频问题解决方案速查8.1 Spring Boot事务不生效检查清单是否使用了Transactional注解方法是否为public是否在同一个类中调用异常类型是否会被回滚数据库引擎是否支持事务(InnoDB)8.2 MyBatis Plus分页失效常见原因没有配置分页插件Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); return interceptor; }Page参数没有放在第一个位置自定义SQL没有使用正确的参数名8.3 API调用连接重置排查步骤检查网络连接是否稳定确认API端点地址是否正确检查防火墙设置尝试降低请求频率捕获异常并实现重试逻辑9. 开发工作流优化9.1 本地调试技巧Spring Boot项目快速调试方法使用DevTools实现热部署配置远程调试java -agentlib:jdwptransportdt_socket,servery,suspendn,address5005 -jar app.jar使用Arthas进行运行时诊断9.2 持续集成实践推荐的工作流IDEA本地开发Git提交触发CIDocker构建镜像Kubernetes部署测试环境自动化测试验证关键配置# .gitlab-ci.yml示例 stages: - build - test - deploy build-job: stage: build script: - mvn clean package - docker build -t myapp .10. 知识体系构建建议建立个人技术知识库的几点经验定期整理零散笔记建议每周一次对解决方案进行抽象总结形成模式建立问题之间的关联关系通过博客或内部分享强化记忆使用工具链如Obsidian、Notion管理知识库技术成长的良性循环 发现问题 → 记录问题 → 解决问题 → 总结方案 → 分享经验 → 发现新问题