摘要:
本文通过对比 MyBatis 原始使用方式 与 Spring Boot Starter 集成方式,系统讲解了 MyBatis 在不依赖 Spring、IOC 和自动注入情况下的完整使用流程。文章从依赖配置、MyBatis 核心配置文件、SqlSessionFactory 创建、SqlSession 生命周期管理、Mapper 执行到事务手动提交与回滚,逐步还原了 MyBatis 的底层执行过程,帮助读者理解其核心原理。最后对比指出,Spring Boot + mybatis-spring-boot-starter 通过自动装配 SqlSessionFactory、SqlSessionTemplate 和声明式事务,大幅简化了模板代码与资源管理。通过“先原始、后集成”的学习路径,有助于深入理解 MyBatis 的运行机制与 Spring 集成的价值。 阅读全文
posted @ 2026-01-26 16:01
花果酿
阅读(4)
评论(0)
推荐(0)
摘要:
本文结合实际业务场景,详细讲解了在 Spring Boot + MyBatis 中手动实现动态数据源的完整思路与实践。通过继承 AbstractRoutingDataSource 并配合 ThreadLocal 保存当前线程的数据源 Key,实现了在同一请求中灵活切换多个数据库。文章从依赖配置、数据源初始化、动态路由原理到实际使用流程进行了系统说明,并进一步优化了数据源配置方式,使新增数据源更加灵活、低侵入。同时重点分析了动态数据源与事务的冲突问题,指出 @Transactional 会在方法进入时绑定默认数据源连接,导致后续切换失效,因此在多数据源场景下需要拆分事务、分别控制。整体为动态数据源的实现与使用提供了一套清晰、可落地的参考方案。 阅读全文
posted @ 2026-01-26 15:59
花果酿
阅读(7)
评论(0)
推荐(0)
摘要:
本文详细解析了 ThreadLocal 内存泄漏风险的根本原因。ThreadLocal 的数据实际存储在 Thread 对象中的 ThreadLocalMap 里,其 Entry 的 key 是 ThreadLocal 的弱引用,value 是强引用。当 ThreadLocal 变量失去外部强引用并发生 GC 时,key 会被回收,但 value 仍可能被 ThreadLocalMap 持有。若线程长期存活且未再次访问 ThreadLocalMap,也未显式调用 remove(),这些 value 就无法被回收,从而造成内存泄漏。虽然 ThreadLocal 内部提供了惰性清理机制,但并不可靠,因此最佳实践是在使用完 ThreadLocal 后主动调用 remove()。 阅读全文
posted @ 2026-01-26 15:56
花果酿
阅读(5)
评论(0)
推荐(0)

浙公网安备 33010602011771号