Spring 事务同步管理器:资源绑定与事务完成回调的执行顺序
订单事务提交后发送消息或清缓存时,为什么回调有时读不到数据、有时又让事务回滚?本文拆解 TransactionSynchronizationManager 的 ThreadLocal 资源绑定、同步注册与触发顺序,说明 beforeCommit 抛异常与 afterCommit 抛异常的差别,并给出可观测与降级思路。
共 5 篇文章
订单事务提交后发送消息或清缓存时,为什么回调有时读不到数据、有时又让事务回滚?本文拆解 TransactionSynchronizationManager 的 ThreadLocal 资源绑定、同步注册与触发顺序,说明 beforeCommit 抛异常与 afterCommit 抛异常的差别,并给出可观测与降级思路。
本文围绕订单创建后发送通知与更新统计的场景,解析 Spring 事件发布从 publishEvent 到监听器执行的同步调用链,说明 @TransactionalEventListener 如何绑定事务阶段,以及异步监听器与事务事件结合时的陷阱。读者将学会正确使用事件机制,避免事务不一致。
本文深入解读 Spring @Cacheable 的 sync 属性如何通过同步控制防止缓存击穿,重点分析在高并发下 sync=true 为何可能导致锁竞争,以及如何与 Redis 等缓存提供者的原子操作配合。通过热点数据过期场景,读者将理解 Spring Cache 拦截器的同步机制、不同缓存提供者的锁实现,以及通过自定义 CacheErrorHandler 处理异常,从而获得避免缓存击穿和锁问题的配置方法。
本文剖析 Spring @Async 默认线程池的拒绝策略,重点讨论 CallerRunsPolicy 在任务堆积时如何导致调用线程阻塞、上下文丢失甚至死锁。通过一个高并发异步任务堆积的贯穿场景,解释 ThreadPoolTaskExecutor 的配置与拒绝策略行为,并给出自定义拒绝策略和上下文传播的解决方案,帮助读者根据任务特性选择合适的拒绝策略。
本文剖析 Spring 声明式事务中传播行为(特别是 REQUIRES_NEW)与数据库隔离级别的组合效应。通过订单创建与库存扣减的跨服务事务编排场景,解释 Spring 事务管理器如何映射传播行为到 JDBC 连接、保存点与事务同步,并分析不同隔离级别下的锁行为与异常路径。读者将获得避免事务边界错误和性能问题的决策矩阵,并理解为何默认隔离级别可能不适用于高并发写操作。