[日常踩坑]--(2)切面未做异常处理

Author:赵志乾
Date:2019-06-12
Declaration:All Right Reserved!!!

踩坑:

前提:切面逻辑和业务代码均未做异常处理。

场景:项目采用多数据源配置,在切面中完成数据源的动态切换。当业务代码抛异常后,没有自动切回默认数据源。

做法:

public Object around(ProceedingJoinPoint point, ChangeDataSource source) throws Throwable {
  
  //切换数据源
  if (!StringUtils.isEmpty(source.source())) {
     DynamicDataSource.putDataSource(source.source());
  }

  //执行业务代码
  Object obj = point.proceed();

  //切换回默认数据源
  DynamicDataSource.putDataSource("default");
  return obj;
}


解决方案:

上述问题是因异常抛出导致未执行切回默认数据源逻辑,故可依据实际的需要采用如下两种方案解决:

方案1:业务代码中将异常捕获,不进行抛出。该方案的限制性较强,有时不满足要求,故不建议采用。

方案2:在切面逻辑中使用finally子句确保切回默认数据源逻辑会执行。如下:

public Object around(ProceedingJoinPoint point, ChangeDataSource source) throws Throwable {
  
  try{
       //切换数据源
       if (!StringUtils.isEmpty(source.source())) {
          DynamicDataSource.putDataSource(source.source());
       }

       //执行业务代码
       Object obj = point.proceed();
  }
  finally{
     //切换回默认数据源
     DynamicDataSource.putDataSource("default");
  }
  
  return obj;
}


建议:

凡是某些逻辑需要必须执行的,建议放在finally子句中,保证对应逻辑一定会执行到(虚拟机宕掉的情况除外)。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我叫白小猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值