- 只对public修饰方法才起作用
- @Transaction默认检测异常为RuntimeException及其子类 如果有其他异常需要回滚事务的需要自己手动配置,例如:@Transactional(rollbackFor = Exception.class)
- 确保异常没有被try-catch{},catch以后也不会回滚
- 检查下自己的数据库是否支持事务,如mysql的mylsam
- Springboot项目默认已经支持事务,不用配置;其他类型项目需要在xml中配置是否开启事务
- 如果在同一个类中,一个非@Transaction的方法调用有@Transaction的方法不会生效,因为代理问题
@Transaction在方法上和类上的区别
- 在类上相当于在每个public方法上加上@Transaction
- 方法上的@Transaction配置会覆盖类上的配置
属性 | 描述 |
value | 可选的限定描述符,指定使用的事务管理器 |
propagation | 可选的事务传播行为设置 |
isolation | 可选的事务隔离级别设置 |
readOnly | 读写或只读事务,默认读写 |
timeout | 事务超时时间设置 |
rollbackFor | 导致事务回滚的异常类数组 |
rollbackForClassName | 导致事务回滚的异常类名字数组 |
noRollbackFor | 不会导致事务回滚的异常类数组 |
noRollbackForClassName | 不会导致事务回滚的异常类名字数组 |