千万 QPS 架构,第 123 讲:「多数据源路由:从静态到动态」
导读:多数据源路由是连接管理里最容易出事的一层。这一讲把它从静态配置讲到运行时动态路由,再到千万 QPS 下的独立路由层,梳理路由键、ThreadLocal、事务冲突和故障感知路由之间的 trade-off。
@Transactional 换个线程就失效?八成是这个原因
@Transactional 换个线程就失效?八成是这个原因 线上出过一个很诡异的事:一个 @Transactional 方法里开了个线程池去异步扣库存,结果主线程事务回滚了,异步线程里的扣库存却落库了。
REQUIRES_NEW挂起的不只是连接,还有6个ThreadLocal
很多人理解 REQUIRES_NEW 传播行为,就一句话:"开个新事务。"但面试官追问一句"那旧事务怎么处理的?",基本答不上来。答案是:旧事务被挂起(suspend)了。
@Transactional可以用于多线程吗
答案:不能主线程回滚了,但子线程不会回滚。多线程事务失效的本质,是 ThreadLocal 的线程隔离性 与 事务的原子性 之间的矛盾。Spring 用 ThreadLocal 绑定数据库连接,保证了单线程下的事务安全,但也注定了多线程下无法直接共享事务上下文。
SpringBoot+MyBatis Plus+Druid实战:多数据源读写分离完整指南
当系统用户量突破10万级,数据库往往成为性能瓶颈!根据美团技术团队的统计,70%的高并发场景问题根源在于数据库读写冲突。这时,多数据源读写分离架构就成了必备方案——让主库专注写操作,从库分担读压力,系统吞吐量瞬间提升3-5倍!
加个数据源@Transactional全失效?问题出在钥匙上
接手过一个项目:本来好好的,后来为了接一套第三方报表,加了个第二个数据源(DataSource),结果原来的 @Transactional 全不生效了——该回滚的没回滚,数据乱成一锅粥。排查到最后,发现是"事务管理器和连接的钥匙对不上"导致的。
Spring Boot 数据源与事务:8个高频坑
数据源和事务是每个 Spring Boot 项目的根基,但凡在这块踩过坑的都知道——轻则接口慢,重则数据丢。以下 8 个高频坑,覆盖了多数据源、主从分离、事务传播等日常高频场景,全是实战代码,直接抄。1.