美文网首页
Springboot对事务的支持

Springboot对事务的支持

作者: 瓢鳍小虾虎 | 来源:发表于2020-12-25 09:26 被阅读0次
  1. 在service类上直接加@Transactional,则他的所有方法都会带有事务的效果,如果加在方法上,则范围会缩小到指定方法上。

2.@Transactional有很多参数:

// 当前事务为只读事务,不允许增删改,
// 用在纯查询的方法上,Spring框架会自动帮助优化,使用只读的connection会提高效率
@Transactional(readOnly=true)

// 事务默认回滚的机制:出现RuntimeException或者Error,如果要使用自定义异常,就要考虑使用如下的方式
// 出现指定异常就回滚,推荐用class形式的参数,使用字符串形式的参数编译器不会报错,不容易及时纠错
@Transactional(rollbackFor=RuntimeException.class)
@Transactional(rollbackFor={RuntimeException.class, Exception.class})
@Transactional(rollbackForClassName="RuntimeException")
@Transactional(rollbackForClassName={"RuntimeException", "Exception"})

// 出现指定异常不回滚
@Transactional(noRollbackFor=RuntimeException.class)
@Transactional(noRollbackFor={RuntimeException.class, Exception.class})
@Transactional(noRollbackForClassName="RuntimeException")
@Transactional(noRollbackForClassName={"RuntimeException", "Exception"})

// 事务传播性是指方法1中调用方法2的时候,怎么处理事务
// 事务传播性:如果当前方法已有事务,则加入此事务,如果没有则新建事务
@Transactional(propagation = Propagation.REQUIRED)
// 不管怎样,总是创建一个新的事务
@Transactional(propagation = Propagation.REQUIRES_NEW)
// 不开启事务
@Transactional(propagation = Propagation.NOT_SUPPORTED)
// 一定要在一个已有的事务中,不然就抛异常
@Transactional(propagation = Propagation.MANDATORY)
// 必须在没有事务的环境中执行,否则抛异常
@Transactional(propagation = Propagation.NEVER)

// 超时,单位为秒,-1代表永不超时。
// 一个常用的场景,用户交易/提现指定时间内没完成就回滚,避免用户焦虑狂按
@Transactional(timeout=10)

// 设置数据库事务隔离级别,一版不用设置,使用数据库默认即可
@Transactional(isolation = Isolation.DEFAULT)

相关文章

网友评论

      本文标题:Springboot对事务的支持

      本文链接:https://www.haomeiwen.com/subject/zcdvnktx.html