java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java @Transactional

Java @Transactional指定回滚条件

作者:梁云亮​​​​​​​

这篇文章主要介绍了Java @Transactional指定回滚条件,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下

异常分类

@Transactional注解属性详解

属性类型描述
valueString可选的限定描述符,指定使用的事务管理器
propagationenum: Propagation可选的事务传播行为设置
isolationenum: Isolation可选的事务隔离级别设置
readOnlyboolean读写或只读事务,默认读写
timeoutint (in seconds granularity)事务超时时间设置
rollbackForClass对象数组,必须继承自Throwable导致事务回滚的异常类数组
rollbackForClassName类名数组,必须继承自Throwable导致事务回滚的异常类名字数组
noRollbackForClass对象数组,必须继承自Throwable不会导致事务回滚的异常类数组
noRollbackForClassName类名数组,必须继承自Throwable不会导致事务回滚的异常类名字数

@Transactional

使用@Transaction注解时,阿里巴巴代码规范插件会提醒需要指定rollbackFor以显示的rollback

默认情况下,Spring框架在使用@Transaction处理事务时默认只在抛出运行时异常unchecked exceptions时才会事务回滚。也就是说,当抛出个RuntimeException 或其子类例的实例时,从事务方法中抛出的Checked exceptions将不被标识进行事务回滚。

注意

代码

@Slf4j
@Service
public class MemberService {

    @Autowired
    private MemberMapper memberMapper;

    @Transactional
    public Integer insert(MemberEntity memberEntity) {
        Integer insertResult = 0;
        try {
            insertResult = memberMapper.save(memberEntity);
            log.info("insertResult:{}", insertResult);
            int result = 1 / memberEntity.getAge();
        } catch (Exception e) {
            log.error("errorMsg:{}", e.getMessage());
            //回滚
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        }
        return insertResult;
    }
}

如上标红代码,如果不写的话,事务是不会回滚的。因为事务被 catch 捕获到了,所以只能手动的进行事务回滚。

到此这篇关于Java @Transactional指定回滚条件的文章就介绍到这了,更多相关Java @Transactional内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文