一、Spring事务传播属性(propagation)1、Propagation(事务传播属性)生成场景:Service可以调用一个或多个Dao方法,但是我们只能在使用SpringLayer之前调用dao,但您不能调用服务层中的其他方法。案例:UserService.java中有一个方法save()。AddressService.java中的Update()就嵌套在其中。当UserService事务回滚时,AddressService事务也可以回滚或提交。publicclassUserService{publicvoidsave(){UserService.update();//AddressService对象uodate操作}}2.七个事务传播属性REQUIRED:需要事务,外部事务集成到当前事务中,没有外部事务事务,新开一个事务【常用于增删改查】SUPPORTS:支持事务,外部事务集成到当前事务中,没有外部事务,不开启新事务【常用于查询操作】REQUIRES_NEW:每次开启新事务,如果有外部事务,则暂停外部事务(Pause),开始新的事务操作,操作结束后恢复外部事务【日志,管道操作】案例分析:转业务operations:transfer,Account,App都是业务层NOT_SUPPORTED:不支持事务,如果有外部事务ExternaltransactionsSuspended,以非事务模式运行。NEVER:不支持事务,有事务错误MANDATORY:强制事务无事务错误NESTED:嵌套事务,数据库不支持2.隔离级别isolationisolation:[?a?s??le??n]:isolation一个事务的基本要素)一个事务在java中training是指多个操作单元的集合。多个单元操作作为一个整体密不可分。要么所有操作都失败,要么全部成功。它必须遵循四个原则(ACID)。ACID指的是:Atomicity,Consistency,Isolation,Persistence(1)原子性(Atomicity[?at??m?s?ti]):定义:表示一个事务要么全部执行,要么不执行,也就是说一个事务不能只执行一半比如:你从ATM上取钱,这个交易可以分为两个步骤:1.刷卡,2.支付。抽卡是不可能的,钱却不出来。这两个步骤必须同时完成。尚未完成。(2)一致性(Consistency[k?n?s?st?nsi]):定义:事务执行前数据库中的数据处于正确状态,事务执行后数据库中数据仍应处于正确状态,即,数据完整性约束没有被破坏;比如:银行转账,当A给B转钱的时候,必须保证A的钱一定是给B转的,绝不会出现A的钱转了B没有收到的情况,否则数据库中的数据会处于不一致(不正确)的状态。(3)隔离(Isolation[?a?s??le??n]定义:并发事务执行互不影响,一个事务内的操作不影响其他事务,这就需要一个事务隔离级别来指定隔离;(4)持久性(Durability[?d?r??b?l?ti]定义:事务一旦成功执行,其对数据库数据的改变必须是永久性的,不会因为系统故障或断电而导致数据不一致或丢失。2.Isolation(事务隔离级别)isolation:隔离级别多个客户端之间操作之间的隔离[Client—>Service](1)DEFAULT:使用数据库默认的隔离级别(Spring提供)Spring框架提供的隔离level,当前使用的数据库对应的默认隔离级别(2)READ_UNCOMMITTED:读未提交解析:不同客户端可以在一个事务中读取其他客户端未提交的事务(3)READ_COMMITTED:读提交使用read_ommited避免脏读:oracle默认隔离级别分析:不同客户端可以在一个事务中读取其他客户端提交的事务(4)REPEATABLE_READ:可重复读主要用于避免不可重复读现象中出现的单词:repeatable:[r?pi:t?bl]repeatablerepeatable_read:mysql默认隔离级别分析:一方在一次事务中更新,导致两次查询结果不一致。这种情况称为不可重复读(5)SERIALIZABLE:序列化读,用来避免幻读现象。幻读的概念:一方在一个事务中插入,导致两次查询的结果不一致。这种情况称为幻读分析:客户端在一个事务中多次读取一张表的数据结果ConsistentIsolationLevelIsolationLevelValueDirtyReadNon-repeatableReadPhantomReadUncommittedRead(Read-Uncommitted)0YesYesCommittedRead(Non-repeatableRead)(Read-committed)1NoYesRepeatableRead(repeatable-read)2NoNo是可序列化(serializable)3NoNoNo隔离级别的特点:隔离级别从低到高,隔离级别越高,越安全,但是锁的内容越高,效率越低3.读写与异常1.只读(read-only):设置当前方法是否只读true:只读false:非只读【默认值】
