问题记录

1.事务问题

spring项目中,如果配置了通用事务,则在方法上单独加上@Transational注解,可能会造
成回滚失效等一些问题;比如:通用配置事务的代码如下:

@Configuration
public class TxConfigBeanName {
  @Autowired
  private DataSourceTransactionManager transactionManager;
  // 创建事务通知
  @Bean(name = "txAdvice")
  public TransactionInterceptor getAdvisor() throws Exception {
    Properties properties = new Properties();
    properties.setProperty("get*", "PROPAGATION_REQUIRED,-Exception");
    properties.setProperty("query*", "PROPAGATION_REQUIRED,-Exception");
    properties.setProperty("add*", "PROPAGATION_REQUIRED,-Exception");
    properties.setProperty("save*", "PROPAGATION_REQUIRED,-Exception");
    properties.setProperty("update*", "PROPAGATION_REQUIRED,-Exception");
    properties.setProperty("remove*", "PROPAGATION_REQUIRED,-Exception");
    properties.setProperty("delete*", "PROPAGATION_REQUIRED,-Exception");
    properties.setProperty("logicDelete*", "PROPAGATION_REQUIRED,-Exception");
    TransactionInterceptor tsi = new TransactionInterceptor(transactionManager,properties);
    return tsi;
  }
  @Bean
  public BeanNameAutoProxyCreator txProxy() {
    BeanNameAutoProxyCreator creator = new BeanNameAutoProxyCreator();
    creator.setInterceptorNames("txAdvice");
    creator.setBeanNames("*Service", "*ServiceImpl");
    creator.setProxyTargetClass(true);
    return creator;
  }
}

由上述看出 save开头的方法都有Required级别的事务,给下面的方法添加自己的事务:

@Override
    @Transactional(propagation = Propagation.NESTED)
    public void saveDoSomeOperate(Map<String, Object> params) throws BusinessException {
        //do something
    }

调用saveDoSomeOperate代码

try{
  xxxService.saveDoSomeOperate(map);
}catch(Exception e){
  log.error("系统错误", e);
}

如果saveDoSomeOperate方法报错,按照NESTED事务传播特性,外层事务应该不会回
滚,但是这里实际情况外层事务会回滚。

如果将NESTED注解的方法名改成 doSomeOperate,内层方法出现异常,只会自己回
滚,外层调用方数据不会回滚,改造如下:

@Override
    @Transactional(propagation = Propagation.NESTED)
    public void doSomeOperate(Map<String, Object> params) throws BusinessException {
        //do something
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容