使用@HystrixCommand 方法异常 怎么在切面中获取异常 而不是获取到fallbackMethod中的返回值
时间: 2024-03-08 20:49:52 浏览: 98
android webview中使用Java调用JavaScript方法并获取返回值
可以在@HystrixCommand注解中添加fallbackMethod属性和ignoreExceptions属性,将需要忽略的异常类型添加到ignoreExceptions中,然后在fallbackMethod方法中将异常抛出,这样在切面中就可以获取到方法的真实异常了。示例代码如下:
```
@HystrixCommand(fallbackMethod = "fallback", ignoreExceptions = {SomeException.class})
public void someMethod() throws SomeException {
// do something
}
public void fallback() throws SomeException {
throw new SomeException();
}
```
在切面中可以通过JoinPoint对象获取到抛出的异常,然后进行相应的处理。示例代码如下:
```
@Around("execution(public * com.example..*.*(..)) && @annotation(hystrixCommand)")
public Object around(ProceedingJoinPoint joinPoint, HystrixCommand hystrixCommand) {
try {
return joinPoint.proceed();
} catch (Throwable throwable) {
if (throwable instanceof HystrixRuntimeException) {
HystrixRuntimeException hystrixRuntimeException = (HystrixRuntimeException) throwable;
if (hystrixRuntimeException.getFailureType() == FailureType.SHORTCIRCUIT) {
// 熔断器打开
} else if (hystrixRuntimeException.getFailureType() == FailureType.TIMEOUT) {
// 超时
} else if (hystrixRuntimeException.getFailureType() == FailureType.REJECTED_THREAD_EXECUTION) {
// 线程池拒绝
} else {
// fallbackMethod方法中抛出的真实异常
Throwable cause = hystrixRuntimeException.getCause();
// 处理真实异常
}
} else {
// 其他异常
// 处理异常
}
}
}
```
需要注意的是,@HystrixCommand注解中的fallbackMethod方法必须要与原方法在同一个类中。
阅读全文