Spring中事务Transactional
Spring中事务遵循的是数据库中的事务,具有ACID的特性
A(原子性):是指事务是一个不可分割的流程,要么全部成功,要么全部失败
C(一致性):事务前后的数据完整性保持一致
I(隔离性):多用户并发的场景下,每一个用户开启的事务不被其他事务干扰
D(持久性):事务一旦被提交,就是永久性的
事务的隔离级别现象:
脏读:一个事务读取了另一个事务未提交的数据
不可重复读:在一个事务内读取同一行数据,多次读取结果不同
虚读(幻读):在事务中读取到了别的事务操作的数据,导致前后读取的结果不一样
事务的隔离级别设置:
  Serializable 可避免脏读、不可重复读、虚读情况的发生。(串行化)
  Repeatable read	可避免脏读、不可重复读情况的发生。(可重复读)
  Read committed	可避免脏读情况发生(读已提交)。
  Read uncommitted	最低级别,以上情况均无法保证。(读未提交)
Spring中注解@Transactional
public @interface Transactional {
//@AliasFor注解:为属性声明别名,成对出现
使用场景:两个值不冲突,且可以相互获取值
使用限制:互为别名的属性类型、默认值是相同的,必须设置默认值 //事务管理器
@AliasFor("transactionManager") String value() default ""; @AliasFor("value") String transactionManager() default ""; String[] label() default {}; //事务传播机制 Propagation propagation() default Propagation.REQUIRED; //事务隔离级别 Isolation isolation() default Isolation.DEFAULT; //超时时间,以秒为单位 int timeout() default -1; String timeoutString() default ""; //事务读写性 boolean readOnly() default false; //一组异常类,遇到异常回滚 Class<? extends Throwable>[] rollbackFor() default {}; //一组异常类名,遇到时回滚 String[] rollbackForClassName() default {}; //一组异常类,遇到异常不回滚 Class<? extends Throwable>[] noRollbackFor() default {}; //一组异常类名,遇到异常不回滚 String[] noRollbackForClassName() default {}; }
传播行为Propagation
public enum Propagation { REQUIRED(0), -- 如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。 SUPPORTS(1), -- 如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。 MANDATORY(2), -- 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。 REQUIRES_NEW(3), -- 如果当前存在事务,则把当前事务挂起;如果当前没有事务,则创建一个新事务 NOT_SUPPORTED(4), -- 如果当前存在事务,则把当前事务挂起;如果当前没有事务,则以非事务方式运行 NEVER(5), -- 如果当前存在事务,则抛出异常;如果当前没有事务,则以非事务方式运行 NESTED(6); -- 如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则创建一个新的事务。
}
隔离级别Isolation
public enum Isolation { DEFAULT(-1), //默认值 ,表示使用数据库中的隔离级别 READ_UNCOMMITTED(1), //未提交读 READ_COMMITTED(2), //已提交读,可以防止脏读 REPEATABLE_READ(4),//可重复读,可以防止脏读和不可重复读 SERIALIZABLE(8); //串行化,事务依次执行,可以防止脏读、不可重复读、幻读 }
使用方式
1.在具体的类方法(bean)上使用@Transactional
2.可以被应用于接口定义和接口方法、类定义和类的public方法上
3.只能在public上使用是因为Spring AOP 的特性。
if (this.allowPublicMethodsOnly() && !Modifier.isPublic(method.getModifiers())) { return null; }
}
}
本文来自博客园,作者:小辉辉。。,转载请注明原文链接:https://www.cnblogs.com/zjylsh/p/16139986.html
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号