
在分布式系统中,定义一个全局异常处理器stater,其它微服务只需要引入依赖即可。
为了方便维护错误信息,因此将错误信息封装到一个枚举中。
为了封装异常处理代码,因此将所有接口的异常处理封装到了springmvc的 ControllerAdvice 中。
二、代码实现:1、引入依赖:
org.springframework.boot
spring-boot-starter-web
org.projectlombok
lombok
2、新建一个接口:
public interface IException {
public int getCode();
public String getMessage();
}
3、新建一个枚举类:
@NoArgsConstructor
@AllArgsConstructor
public enum ExceptionEnum implements IException {
NOT_FIND(404, "查询失败"),
;
int code;
String message;
@Override
public int getCode() {
return code;
}
@Override
public String getMessage() {
return message;
}
}
4、新建一个自定义异常类:
error方法可同时记录日志和向上抛异常
@Data
public class MyException extends RuntimeException {
private Integer errorCode;
private String errorMessage;
public MyException (IException iException) {
this.errorCode = iException.getCode();
this.errorMessage = iException.getMessage();
}
public static void error(Logger logger, IException e,Exception source) {
logger.error("异常码[{}],异常提示[{}],异常详情:",
e.getCode(), e.getMessage(),source);
throw new MyException (e);
}
public static void error(Logger logger, IException e) {
logger.error("异常码[{}],异常提示[{}]",
e.getCode(), e.getMessage());
throw new MyException (e);
}
}
5、全局异常处理器(处理逻辑较为简单,仅供参考):
@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {
@ExceptionHandler(value = Exception.class)
public ResponseEntity
6、新增自动配置文件GlobalExceptionHandlerAutoConfiguration
@Configuration
public class GlobalExceptionHandlerAutoConfiguration {
@Bean
public GlobalExceptionHandler globalExceptionHandler() {
return new GlobalExceptionHandler();
}
}
7、新增resouces/meta-INF/spring.factories,内容如下:
#值为自定义的自动配置文件路径 org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.test.exception.GlobalExceptionHandlerAutoConfiguration
8、记录日志:
引入依赖:
org.springframework.boot spring-boot-starter-logging
新建文件logback-spring.xml:
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n INFO ACCEPT DENY %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n d:/logs/info/info.%d.log WARN ACCEPT DENY %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n d:/logs/warn/warn.%d.log ERROR %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n d:/logs/error/error.%d.log
9、使用时,在其它模块中引入此模块依赖,业务代码如下:
try{
...
}
catch (Exception e) {
MyException.error(log,ExceptionEnum.BRAND_NOT_FOUND,e);
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)