事务的使用
- 在springboot中给需要添加事务的方法添加,@Transactional注解
@Transactional中各参数记录
isolation(事务的隔离级别):
int ISOLATION_DEFAULT = -1;//默认的隔离级别,使用当前数据库的隔离级别。会是后面四种隔离级别的其中一种
int ISOLATION_READ_UNCOMMITTED = 1;//读未提交;
int ISOLATION_READ_COMMITTED = 2; //读已提交;
int ISOLATION_REPEATABLE_READ = 4; //重复读;
int ISOLATION_SERIALIZABLE = 8; //串行化
**注意在MySQL中默认的事务的隔离级别是ISOLATION_REPEATABLE_READ **
propagation()
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;//如果当前上下文中已经存在事务,就开启一个嵌套的事务。简单来说就是不管当前上下文中是否存在事务,本次都会创建一个事务
默认使用第一级别
其他参数
- timeout:设置延迟参数,如果超过延迟时间,自动回滚事务
- rollbackFor:设置需要回滚的异常
- norollbackFor:当遇到某个异常时不需要回滚
其他的注意事项
- 事务只在碰到runtime异常(运行时异常)与error异常时才会回滚事务
- 如果在代码块中使用try catch则无法自动回滚异常,需要手动提交异常
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();