@Transactional注解解析

Transactional事务注解

需要在.application配置文件中配置才能开启注解模式



    
        
        
        
        
        
        
    

 

使用aop切面实现开启一个事务

rollbackFor = Exception.class   如果方法里出现Exception异常时,那么这个方法就会回滚,不过方法里的代码不能被try catch

包裹住,否则异常会被捕获,之后不会触发回滚事件

readOnly=true    开启只读事务。

readOnly=false  默认,开启读写事务。写数据的时候,假如某一行代码报错了,那么这个方法会被回滚,当作没发生过一样。

propagation = Propagation.REQUIRED  如果当前没有事务就会创建一个新的事务,有事务就不会创建新的事务,

假设:

public class xxx{
    //假设有两个方法a,b
    @Transactional(rollbackFor = Exception.class, readOnly=false, propagation = Propagation.REQUIRED)
    public void a() {
        b();
    }
    //如果b方法事务注解带有propagation = Propagation.REQUIRED属性的话,那么b方法的事务就是在a方法开始时就运行的,且b方法不会创建新的事务,如果出现异常,那么a和b方法会一起被回滚
    //到这一步:程序发现b方法的事务带有Transactional属性,就会去扫描现在是否还有事务在运行中,然后发现有a方法的事务还在运行就会直接使用a方法事务,并不会去创建新事务,而a方法事务带有出现异常就会回滚的属性,b方法出现异常会和a方法一起被回滚掉
    @Transactional(propagation = Propagation.REQUIRED)
    public void b() {
        throw new Exception();
    }
}

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(@Transactional注解解析)