- @Transactional(rollbackFor = Exception.class)是一种常用的java开发事务注解,最近因为事务失效导致一个线上问题,为此我百度了很多关于这个注解的使用却没有发现一个比较使用的,所以在此做一个简单应用层面的使用解释。
- @Transactional(rollbackFor = Exception.class)主要核心是基于AOP实现的,运用了动态代理的设计模式,控制了事务的提交,我们在开发过程中知道一个没有事务的方法调用一个有事务的方法会导致事务失效,但是我们在开发过程中一般都是添加在server层,controller层调用server层进而实现业务逻辑但是controller层是没有注解的但是我们的代码还是有事务的,这是因为动态代理模式对接口实现了事务,如果我们在一个controller层调用多个方法极可能会出现事务失效的问题,尽量不要在controller层做业务处理,都放在server层处理,在业务层添加事务。
- 代码中如果有try{}catch 一定要有意识观察事务是否失效,尽量把try 给缩小范围,如果没有办法缩小在try中有多个数据库增删改操作,一定要在catch中抛出异常,这样就会回滚(这次我就是这个问题),我只是return了一个错误码 导致事务失效,其实事务失效就是每一个原子化操作没有得到统一的处理,所以在排查的时候就看看有几个原子操作,如果多个就记得抛出异常,如果一个可以抛出也可以捕获。
- 开发过程中由于业务的复杂建议读者多去封装,尽量将方法做成共用的方法,在业务的主线路上都是方法调用,实现都是在小方法中,具体的好处我就不多说了,事务就在这个主方法上添加,每个小方法就不要添加了。
posted @
2021-10-09 15:41
Hallowmas
阅读(
676)
评论()
编辑
收藏
举报