Files
springboot-scaffold/target/classes/com/example/scaffold/learning/TransactionLearningController.class

8 lines
5.1 KiB
Plaintext
Raw Normal View History

<EFBFBD><EFBFBD><EFBFBD><EFBFBD>=<00>ACIDAtomicity (原子性)$事务是不可分割的工作单位Consistency (一致性)
Q事务必须使数据库从一个一致性状态变换到另一个一致性状态 Isolation (隔离性)i多个用户并发访问数据库时数据库为每个用户开启的事务不能被其他事务干扰Durability (持久性)9事务一旦提交对数据库的改变是永久性的   java/util/Mapof<00>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map; Spring事务0@Transactional 注解实现声明式事务管理  Y(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;!REQUIRED (默认)#描述%!有事务则加入,无则新建'场景)!最常用,大多数业务方法+示例-!A 调用 BB 加入 A 的事务 / 0}(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;2 REQUIRES_NEW4'总是新建事务,挂起当前事务6日志记录、独立子任务87A 调用 BB 在新事务执行A 回滚不影响 B:SUPPORTS<-有事务则加入,无则以非事务运行> 查询方法@ NOT_SUPPORTEDB'以非事务运行,挂起当前事务D不需要事务的操作F MANDATORYH*必须在事务中运行,否则抛异常J强制要求事务LNEVERN*不能在事务中运行,否则抛异常P确保无事务RNESTEDT嵌套事务,可独立回滚V部分失败不影响整体 X Y (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;[DEFAULT]!使用数据库默认隔离级别_READ_UNCOMMITTEDa 读未提交c问题e!脏读、不可重复读、幻读g性能i最高kREAD_COMMITTEDm 读已提交o不可重复读、幻读q较高s大多数数据库默认uREPEATABLE_READw 可重复读y幻读{中等} MySQL 默认 SERIALIZABLE<00> 串行化<00><00>最低<00>数据一致性要求极高<00> 问题说明<00>脏读<00>$读到其他事务未提交的数据<00>不可重复读<00>6同一事务两次读取结果不同修改导致<00>=同一事务两次读取结果不同(新增/删除导致) <00> <00><00>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;<00> 默认行为<00>(只对 RuntimeException 和 Error 回滚<00> rollbackFor<00>!指定需要回滚的异常类型<00> noRollbackFor<00>$指定不需要回滚的异常类型<00>f@Transactional(rollbackFor = Exception.class)
@Transactional(noRollbackFor = BusinessException.class)
<00> 测试API<00> 创建订单<00>POST /api/orders<00>创建订单(回滚)<00>POST /api/orders?rollback=true <00> <00><00>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;
<00><00><00> <00><00>java/lang/Object<init>()V<00>;com/example/scaffold/learning/TransactionLearningController
<00><00><00> <00><00>org/slf4j/LoggerFactory getLogger%(Ljava/lang/Class;)Lorg/slf4j/Logger; <00><00> <00><00>logLorg/slf4j/Logger;concepts()Ljava/util/Map;CodeLineNumberTableLocalVariableTablethis=Lcom/example/scaffold/learning/TransactionLearningController; Signature7()Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;RuntimeVisibleAnnotations4Lorg/springframework/web/bind/annotation/GetMapping;value /concepts propagation /propagation isolation
/isolationrollback /rollback<clinit>
SourceFile"TransactionLearningController.java8Lorg/springframework/web/bind/annotation/RestController;8Lorg/springframework/web/bind/annotation/RequestMapping;/api/learning/transaction!<00><00><00><00><00><00><00>O    <11><1B><1D><00><00> <00><00><00><00><00><00><00>[s<00><00><00><00><00>g "$&(*,<2C>.1"3&5*7<>.9";&=<3D>?"A&C<>E"G&I<>K"M&O<>Q"S&U<><1D>W<><00>& ,-2,79;F?SC`Gc,<00> g<00><00><00><00><00><00><00>[s<00><00><00><00><00>iZ\^"`bdfh<>.j"lbnfp&r<>t"vbxfz&|<7C>~"<12>b<12>f<12>&<12><><12><12><12><12><12>x<12><>.<2E><00><><00>SU'Z<`QfbleS<00> i<00><00><00><00><00><00><00>[s<00><00><00><00>S !<12><12><12><12><12><12>*<12><12><12><12><12><12><><1D><00><><00>y<00>y<00> !<00><00><00><00><00><00><00>[s<00><00><00><00>/*<2A><00><><00><00> <00><00><00><00><00>! <12><><00><><00><><00><00><00><00><00><00><00>[s<00>