- 在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)
网友评论