Spring_day03_2(Spring的声明式事务属性解读&&事务的传播)

                                                                             声明式事务属性解释
    	<!-- 具体哪些方法进行哪些控制 -->
    	<tx:attributes>
    	<!-- name:方法名称,可是使用通配符,read-only:只读,是否开启事务  -->
    		<tx:method name="sel*" read-only="true"/>
    		<tx:method name="update*" read-only="false"/>
    		<tx:method name="del*" read-only="false"/>
    		<tx:method name="insert*" read-only="false"/>
    	</tx:attributes>

1. read-only=””
1.1 false 默认值,表示需要进行事务开启和提交等,适用于增加,删除,修改
1.2 True 表示只读,不需要开始事务等操作,适用于查询
2. rollback-for=”” 当切点中出现什么类型异常时需要进行回滚.
2.1. 取值为类型全限定名称
2.2 例如: rollback-for=”java.lang.Exception”
3. no-rollback-for=”” 当切点中出现什么类型异常时不需要回滚.
4. Propagation=”” 事务传播行为.
4.1 什么样情况下需要考虑事务传播行为?
当一个有事务控制的方法,调用另一个有事务控制的方法时,出现了2个事务交叉的情况,控制两个事务如何运行的过程就叫做事务传播行为.
4.2 REQUIRED , 默认值.表示如果当前有事务,就在当前事务内执行.如果当前没有事务,新建一个事务.
 
4.3 SUPPORT: 如果当前有事务就在事务中执行,如果当前没有事务就在非事务状态下执行.
4.4 MANDATORY:如果当前有事务就在事务中执行,如果当前没有事务,抛异常.
 
4.5 REQUIRES_NEW:一定新建事务,如果当前已经有事务把当前事务挂起.
 
4.6 NOT_SUPPORTED:必须没有事务,如果当前已经有事务,把当前事务挂起.
4.7 NEVER:必须没有事务,如果当前已经有事务抛异常.
4.8 NESTED:如果当前有事务,新建一个嵌套子事务.
5. isolation=”” 事务隔离级别
5.1 什么样情况下需要考虑事务隔离级别?
当在多线程,高并发访问情况下,需要考虑事务隔离级别.
   5.2 考虑事务隔离级别主要考虑的是如何保证数据的安全性.
   5.3 脏读?
       5.3.1 事务A读取到了事务B未提交的数据.事务A读取到的数据叫做脏数据,读取数据的过程叫做脏读.
       5.3.2 在具备缓存的情况下可能出现脏读.
   5.4 不可重复读?
       5.4.1 针对于表中一行数据或一行中某列数据.
       5.4.2 当事务A在修改一行数据时,没有提交,事务B读取到这行数据,事务B读取的数据就是旧数据和以后的真实数据不一致.为了防止事务B读取到未操作完成的数据的过程叫做不可重复读.
   5.5 幻读?
   
5.5.1 针对于整个表.
       5.5.2 幻读: 事务A向表中新增一条数据,没有提交事务,事务B查询表中全部数据.事务B读取到的数据和最终真实数据少一条,等读取结束发现读取到的数据和真实数据不一样,好像出现了幻觉一样,所以叫做幻读.

如何解决:isolation=""的取值

5.6 DEFAULT: 默认值. Spring不参与事务控制,事务控制取决于底层数据库.

5.7 READ_UNCOMMITTED:可以读取到未提交数据.可能出现脏读,幻读,不可重复读.这种方式效率是最高的.

5.8 READ_COMMITTED: 只能读取已经提交的数据.可以防止脏读,但是可能出现不可重复读,幻读

5.9 REPEATABLE_READ: 如果有事务对某行数据进行操作,其他事务在读取这行数据时必须等待正在操作的事务执行完毕,才能读取.可以防止脏读,不可重复读.可能出现幻读

5.10 SERIALIZABLE:对整个表进行加锁,只有有事务在操作表,其他事务必须等待排队.全能防止.但是效率是最低的.也是最安全的.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值