spring 申明式事务管理

spring的申明式事务管理有三种
1、基于注解申明式事务管理
2、基于AOP申明式事务管理
3、基于tx/aop的申明式事务管理

1、基于注解申明式事务管理
配置文件:

    
    
        
        
            
            
        
    
        
        

然后在需要的类或者方法上加上@Transactional注释即可

2、基于AOP申明式事务管理

    
    
       
       
           
           
       
    
    
       
           
           
           
               
                   ISOLATION_DEFAULT,PROPAGATION_REQUIRED
               
           
       

3、基于tx/aop的申明式事务管理

    
       
           
           
       
    
       
           
               
           
       
    
       
           
           
       

spring事务的参数有八种,分别是:
参数有isolation、propagation、timeout、noRollbackForClassName、RollbackForClassName
noRollbackFor、RollbackFor、readOnly

isolation有五种:
1、Isolation_Default:默认隔离级别,使用数据库默认的事务隔离级别
2、Isolation_Read_Uncommitted:读取未提交(可能出现脏读幻读和不可重复读)
3、Isolation_Read_Committed:读取提交(可能出现幻读不可重复读)
4、Isolation_Repeatable_Read:可重复读(可能会出现幻读)
5、Isolation_Serialize:不会出现幻读

propagation有七种:
1、propagation_required:代表当前方法支持当前的事务,且与调用者处于同一事务上下文中,
回滚统一回滚(如果当前方法是被其他方法调用的时候,且调用者本身即有事务),
如果没有事务,则自己新建事务,

2、propagation_supports:代表当前方法支持当前的事务,且与调用者处于同一事务上下文中,
回滚统一回滚(如果当前方法是被其他方法调用的时候,且调用者本身即有事务),
如果没有事务,则该方法在非事务的上下文中执行

3、propagation_mandatory:代表当前方法支持当前的事务,且与调用者处于同一事务上下文中,
回滚统一回滚(如果当前方法是被其他方法调用的时候,且调用者本身即有事务),
如果没有事务,则抛出异常

4、propagation_never:只能在非事务中执行,如果当前有事务执行则抛出异常

5、propagation_nested:如果一个活动的事务存在,则运行在一个嵌套的事务中,
也就说,这部分方法是外部方法的一部分,调用者回滚,则该方法回滚,
但如果该方法自己发生异常,则自己回滚,不会影响外部事务如果没有活动
事务,则按propagation_required属性执行。

6、propagation_not_supported:总是非事务的执行,并挂起任何存在的事务

7、propagation_requires_new:创建一个新的事务上下文,如果当前方法的调用者已经有了事务,
则挂起调用者的事务,这两个事务不处于同一上下文,如果各自发生异常,各自回滚

propagation_required/propagation_supports/propagation_mandatory三种都需要统一回滚

propagation_nested/propagation_requires_new各自回滚

propagation_never/propagation_not_supported不回滚

参考链接:
https://blog.csdn.net/liuwenbiao1203/article/details/52439835
https://blog.csdn.net/linuu/article/details/51006780
https://www.cnblogs.com/caoyc/p/5632963.html

你可能感兴趣的:(spring 申明式事务管理)