事务的属性:
1.propagation:用来设置事务的传播行为
事务的传播行为:一个方法运行在了一个开启了事务的方法中时,当前方法是使用原来的事务还是开启一个新的事务。
propagation=Propagation.REQUIRED:默认值,使用原来的事务
propagation=Propagation.REQUIRES_NEW:将原来的事务挂起,开启新的事务
2.isolation:用来设置事务的隔离级别
isolation=Isolation.REPEATABLE_READ:可重复读,MySQL的默认隔离级别
isolation=Isolation.READ_COMMITTED:读已提交,oralce的默认隔离级别,开发时通常使用的隔离级别。
1.事务的传播属性
当前事务方法被另一个事务方法调用时,必须指定事务应该如何传播。例如:方法可继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运行。
事物的传播行为可以由传播属性指定。Spring定义了7种类传播行为。
其中前4种是开发中用到概率比较大的,建议熟记;后面3种不常用,了解就行。
我们经常会提到,方法A传播到方法B,显而易见进入A方法执行半途中,再次进入B方法,这才叫做传播到方法B中。
2.数据库事务并发问题
假设现在有两个事务:transaction01和transaction02并发执行
脏读:
transaction01将某条记录的age值从20修改为30;
transaction02读取了transaction01更新后的值:30;
transaction01回滚,age值恢复到20;
transaction02读取到的30就是一个无效值。
确保transaction01可以多次从一个表中读取到相同的行,在transaction01执行期间,禁止其它事务对这个表进行添加、更新、删除操作。可以避免任何并发问题,但性能十分低下。