通过TransactionDefinition接口来学习spring事务的隔离级别和传播特性

public interface TransactionDefinition {
int PROPAGATION_REQUIRED = 0;  //事务传播级别1:当前如果有事务,Spring就会使用该事务;否则会开始一个新事务;(这也是默认设置和定义)
int PROPAGATION_REQUIRES_NEW = 3;//事务传播级别4:总是要开启一个新事务。如果当前已经有事务,则将已有事务挂起

在开发的过程中,用事务最多的方式是通过注解@Transaction来完成的,虽然大多数的业务场景都可以在这一个注解下完成即可。
但是为了适应某些特别的场景比方说只读方法的优化等,通过对@Transaction来添加参数来完成我们想要的事务传播特性和隔离级别,以及是否只对某些异常类做回滚,是否只读方法等。
1)使用propagation 指定事务的传播行为,即当前的事务方法被另外一个事务方法调用时如何使用事务。

默认取值为REQUIRED,即使用调用方法的事务

REQUIRES_NEW:使用自己的事务,调用的事务方法的事务被挂起。

2)使用isolation 指定事务的隔离级别,最常用的取值为READ_COMMITTED
3)默认情况下 Spring 的声明式事务对所有的运行时异常进行回滚,也可以通过对应的属性进行设置。通常情况下,默认值即可。
4)使用readOnly 指定事务是否为只读。 表示这个事务只读取数据但不更新数据,这样可以帮助数据库引擎优化事务。若真的是一个只读取数据库值得方法,应设置readOnly=true
5)使用timeOut 指定强制回滚之前事务可以占用的时间。

原文地址:https://www.cnblogs.com/zhuxiang1029/p/15080799.html