在一个业务功能里try-catch使用很频繁,没有使用try-catch的情况是很少的,如果一段代码从底层到api都没有使用try-catch我感觉这代码可能有问题,为什么呢,因为即使业务代码没有问题,仍然会有一些系统层级的bug出现会阻塞导致bug出现,而try-catch就是java里面具备的最后一道关卡,所以try-catch是非常重要的。
同时跟try-catch相关的exception也是非常重要,自定义exception可以迅速定位问题在哪里,并且可以配合try-catch进行正确的业务异常处理,举个例子在service层使用
try {
...
} catch (BizException e){
throw e;
}
class BizException extends Exception{
String code;
String msg;
}
在controller层使用
try {
...
} catch (BizException e){
return BizResult.builder().code(e.getCode).msg(e.getMsg).build();
} catch (Exception e){
return BizResult.builder().code("00009999").msg("业务繁忙,请稍后重试").build();
}
这样就可以使用exception帮助实现业务异常的判断并进行正常的业务异常的反馈。
有时候在开发过程中也会出现因非代码问题造成的bug,比如配置被误修改或者,或者调用的服务被中断等不可预知的问题,这时候也可以使用try-catch来进行处理,否则仍然会出现生产异常
try {
int count = bizMapper.updateByPrimaryKey(bizObj);
if(count != 1){
throw DbException.builder.code("10110011").msg("数据库操作异常").build();
}
} catch (Exception e) {
LOGGER.error("数据库操作异常",e);
throw DbException.builder().code("10110011").msg("数据库操作异常").build();
}
对于数据库操作也要进行判断操作结果是否满足要求,如果不满足预期的结果也可以通过自定义异常来进行判断处理,数据库操作也不能保证百分之百不会出问题,比如配置错误,网络中断等都可能造成数据库操作,甚至其他一些少见的异常,所以底层也是有必要使用try-catch的。
综上,在一个业务功能开发,一般需要两个以上的try-catch,并在controller层将Exception进行处理,从而使前端可以返回正常的业务提示。