
javavolatile关键字控制三个线程按顺序交替输出数字123123…同数据源方法 a、b、c具有事务性方法 d依次调用 a, b, c如何处理事务性自注入-同 Service 内ServicepublicclassBusinessService{// 关键点注入自身的代理对象解决 this 调用失效AutowiredLazyprivateBusinessServiceselfProxy;// d 方法开启全局事务 Transactional(rollbackForException.class)publicvoidd(){// 1. 执行 d 自身的 SQL如有System.out.println(D: 执行主 SQL...);// dMapper.insertXxx();// 2. 间接调用 a, b, c必须通过代理对象selfProxy.a();selfProxy.b();selfProxy.c();}// a, b, c 方法加入主事务 // 默认 REQUIRED 会检测到 d 已存在事务直接加入不新建Transactional(propagationPropagation.REQUIRED,rollbackForException.class)publicvoida(){System.out.println(A: 执行 SQL...);// aMapper.updateXxx();}Transactional(propagationPropagation.REQUIRED,rollbackForException.class)publicvoidb(){System.out.println(B: 执行 SQL...);// bMapper.deleteXxx();}Transactional(propagationPropagation.REQUIRED,rollbackForException.class)publicvoidc(){System.out.println(C: 执行 SQL...);// cMapper.insertXxx();}}拆分 Service将 a/b/c 抽取到独立的 SubService 中MainService 通过注入 SubService 调用。跨类调用天然经过 Spring 代理无需额外处理。springSpringMVC 工作原理事务失效场景Scheduled默认单线程解决方案mysql慢查询日志排查优化深分页优化事务隔离级别