spring事务总结

一、事务的四大特性:

     1、原子性

              指事务是一个不可分割的工作单位,事务中的操作要么成功,要么都不发生。

     2、一致性

              指事务前后数据的完整性必须保持一致

     3、隔离性

              指多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之家数据要相互隔离。

     4、持久性              

             指一个事务一旦被提交,它对数据库中数据的该表就是永久性的,即使数据库发生故障也不应该对其有任何影响。

二、Spring为我们提供了三个高层抽象的几口

1、PlatformTransactionManager(平台事务管理器):提供三个方法   

TransactionStatus getTransaction(TransactionDefinition var1) throws TransactionException;

void commit(TransactionStatus var1) throws TransactionException;

void rollback(TransactionStatus var1) throws TransactionException;

 2、TransactionDefinition(事务定义信息,隔离、传播、超时、只读):

传播行为:
int PROPAGATION_REQUIRED = 0;
int PROPAGATION_SUPPORTS = 1;
int PROPAGATION_MANDATORY = 2;
int PROPAGATION_REQUIRES_NEW = 3;
int PROPAGATION_NOT_SUPPORTED = 4;
int PROPAGATION_NEVER = 5;
int PROPAGATION_NESTED = 6;
隔离级别:
int ISOLATION_DEFAULT = -1;
int ISOLATION_READ_UNCOMMITTED = 1;
int ISOLATION_READ_COMMITTED = 2;
int ISOLATION_REPEATABLE_READ = 4;
int ISOLATION_SERIALIZABLE = 8;
超时:
int TIMEOUT_DEFAULT = -1;

3、TransactionStatus(事务具体运行状态,获取事务的具体状态):

boolean isNewTransaction();
boolean hasSavepoint();
void setRollbackOnly();
boolean isRollbackOnly();
void flush();
boolean isCompleted();

三、不考虑隔离性,会引发安全问题

     1、脏读

               

     2、不可重复读

                  

     3、幻读

        

     4、以下就是解决隔离级别的配置

           

四、事务的传播行为

       1、事务的传播行为是解决开发中实际问题的,例如

                service1 (业务层,调用dao1,dao2)

                              xxx1()<---------------------------------------- xxx1Dao()持久层

                aaa()

                              xxx2()<-----------------------------------------xxx2Dao()持久层

                service2(业务层,调用dao3,dao4)

                              xxx3()<---------------------------------------- xxx3Dao()持久层

               bbb()

                              xxx4()<-----------------------------------------xxx4Dao()持久层

                出现复杂的情况:

                            同时调用service1.aaa() 和 service2.bbb()方法才能完成一个业务员;假如aaa()有事务,bbb()有事务,那么应该                              调用哪个事务呢?

           2、传播行为分三类:

                     

                     上图每个画大红圈的是三种分类,

                       1、如果aaa()有事务,那么aaa()和bbb()都用aaa()的事务,如果aaa()事务不存在,那么bbb()就创建一个事务把               aaa()    的内容包裹起来执行一个事务;

                       2、如果aaa()有事务,那么aaa()和bbb()都用aaa()的事务,如果aaa()事务不存在,那么bbb()就不使用事务;

                       3、如果aaa()有事务,那么aaa()和bbb()都用aaa()的事务,如果aaa()事务不存在,那么就抛出异常;

                       4、如果aaa()有事务,那么aaa()事务挂起不使用了;aaa()和bbb()不在一个事务,那么新建一个事务放在一起;

                       5、如果aaa()有事务,那么aaa()事务挂起不使用了;

                       6、有事务就抛出异常

                       7、aaa()执行完了标记一个保存点,如果bbb()执行失败,那么可以回复到aaa()保存完的那个执行点,也可以回复到最初状态。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值