
事务
文章平均质量分 95
武子康
Hi, I'm Zikang / 武子康
好奇心驱动的探索者 | INTJ / INFJ
我热爱探索一切值得深究的事物。对技术、成长、效率、认知、人生有着持续的好奇心和行动力。
坚信「飞轮效应」,相信每一次微小的积累,终将带来深远的改变。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java-142 深入浅出 MySQL Spring事务失效的常见场景与解决方案详解(4)
事务管理依赖于 ThreadLocal 保存事务上下文,因此在单线程环境下工作良好,但在多线程场景中常常失效。由于子线程无法继承父线程的 ThreadLocal 变量,导致在事务方法中创建新线程时,子线程的数据库操作不会被纳入事务管理,从而出现事务失效问题。解决该问题的常见做法包括:避免在事务方法内部直接创建新线程,将并发逻辑移出事务边界;使用编程式事务管理(如 TransactionTemplate 或显式使用 DataSourceTransactionManager)确保每个线程独立管理事务;在复杂场景原创 2025-10-07 10:19:18 · 541 阅读 · 0 评论 -
Java-141 深入浅出 MySQL Spring事务失效的常见场景与解决方案详解(3)
在 Spring 事务管理中,事务失效常见于 rollbackFor 配置错误、子类覆盖父类事务注解、以及嵌套事务传播机制等场景。首先,@Transactional 默认仅在 RuntimeException 和 Error 触发回滚,若错误地指定 rollbackFor 为单一异常类型,将导致其他异常无法回滚,引发数据不一致。其次,当子类重写父类事务方法时,若未显式声明事务注解,Spring AOP 代理可能绕过事务增强,导致事务失效。再次,在嵌套事务场景下,默认传播行为为 REQUIRED,子方法异常会原创 2025-10-04 11:51:03 · 957 阅读 · 0 评论 -
Java-140 深入浅出 MySQL Spring事务失效的常见场景与解决方案详解(2)
Spring 事务失效的场景主要源于 AOP 动态代理和数据库特性限制。在方法访问修饰符方面,Spring 使用 JDK 动态代理时要求目标方法必须为 public,否则在 computeTransactionAttribute() 中直接返回 null,导致事务注解无效。因此在 private、protected 或类内自调用时事务会失效,解决方案是保证方法 public、避免自调用,或使用 AspectJ。另一方面,数据库存储引擎选择也会影响事务:MyISAM 不支持事务与行级锁,而 InnoDB 完整原创 2025-10-03 14:07:55 · 869 阅读 · 0 评论 -
Java-139 深入浅出 MySQL Spring事务失效的常见场景与解决方案详解(1)
在 Spring 中,事务失效常见于以下几类场景:类未被 Spring 管理(如未加 @Service、@Component 注解或扫描路径遗漏,或直接 new 对象导致事务无效);事务管理器未启动(Spring Boot 通常会通过自动配置创建 DataSourceTransactionManager,但若缺少依赖或配置异常也会失效);方法修饰不当(final、static、private 方法因代理机制限制无法生成事务代理);同类内部调用(this 调用绕过代理,导致 @Transactional 不生原创 2025-10-02 15:10:02 · 597 阅读 · 0 评论 -
Java-138 深入浅出 MySQL Spring Boot 事务传播机制全解析:从 REQUIRED 到 NESTED 的实战详解 传播机制原理
事务传播是 Spring 中处理事务边界的重要机制,它定义了方法在调用链中与事务上下文的交互方式。常见传播行为包括:PROPAGATION_REQUIRED(默认值),在已有事务中加入,否则新建事务,适合大部分业务场景;PROPAGATION_REQUIRES_NEW 每次都新建独立事务,外部事务会被挂起,常用于日志记录或审计操作;PROPAGATION_NESTED 在已有事务中创建保存点,支持局部回滚,适合批量处理或部分回滚的需求;PROPAGATION_MANDATORY 要求必须在事务中运行原创 2025-09-30 09:12:24 · 1630 阅读 · 0 评论 -
Java-135 深入浅出 MySQL 数据库事务中的四大问题解析:脏读、不可重复读、重复读与幻读
在数据库事务中,常见的问题包括脏读、不可重复读和幻读。脏读是指事务读取到其他事务尚未提交的数据,一旦对方回滚,就会导致数据不一致,常发生在隔离级别为 Read Uncommitted 时。不可重复读则是同一事务内前后两次读取同一记录时,由于其他事务的更新,导致结果不一致,典型出现在 Read Committed 隔离级别下。重复读(Repeatable Read)通过MVCC机制保证同一事务内多次读取结果一致,避免脏读和不可重复读,但仍可能遇到幻读。幻读表现为在同一事务内,两次相同的范围查询返回的行数不一致原创 2025-09-26 08:39:05 · 930 阅读 · 0 评论 -
Java-134 深入浅出 MySQL事务隔离级别全解析:从READ UNCOMMITTED到SERIALIZABLE SQL实测
5.7 及以下版本,可通过 @@SESSION.tx_isolation 查询会话级别;在 MySQL 8.0 及以上版本,变量更名为 @@SESSION.transaction_isolation。四种隔离级别分别是 READ UNCOMMITTED(读未提交,允许脏读,性能高但一致性差)、READ COMMITTED(读已提交,避免脏读但可能出现不可重复读)、REPEATABLE READ(可重复读,MySQL 默认级别,防止脏读和不可重复读,但可能出现幻读)以及 SERIALIZABLE(串行化,最高原创 2025-09-25 08:52:11 · 977 阅读 · 0 评论 -
Java-133 深入浅出 MySQL事务详解与实测:ACID特性、隔离级别及应用场景 最小化测试
事务(Transaction)是保证数据一致性与完整性的核心机制,遵循 ACID(原子性、一致性、隔离性、持久性)原则。通过 BEGIN/START TRANSACTION、COMMIT、ROLLBACK 和 SAVEPOINT 等命令,开发者可灵活控制事务的开启、提交和回滚。典型场景包括银行转账、订单处理和批量数据导入,确保操作要么全部成功,要么全部撤销。InnoDB 作为 MySQL 默认存储引擎,提供完整的事务支持,并通过隔离级别(READ UNCOMMITTED、READ COMMITTED、REP原创 2025-09-24 11:46:31 · 1208 阅读 · 0 评论