resilience4j 注释不适用于 chlid class
resilience4j annotations not working on chlid class
我在 SpringBoot 中使用 resilience4j。我看到只有将 resilience4j 注释放在 class 中才会引发异常。如果 class 由另一个 class 扩展并且 parent class 有注释,则重试不起作用。
Resilience4j 配置
resilience4j.retry:
instances:
service:
maxRetryAttempts: 5
waitDuration: 1000
retryException:
- com.common.exception.RetriableException
Parent Class
@Retry(name = "service")
@Component
public class httpClient extends client{
// This method is invoked from outside
public HttpResponse<T> getResponse(
String url, Class<T> responseType) {
return super.getResponse(url, requestEntity, responseType);
}
}
Child Class
@Retry(name = "service") // Without this line, the retries don't work, even though it is present in the parent class
@Component
public class client{
public HttpResponse<T> getResponse(
String url, Class<T> responseType) {
//Impl which throws RetriableException
}
}
这是预期的行为吗?如果我遗漏了什么,你能告诉我吗
我以前从未使用过 Resilience4j,但关于 Java 注释,我可以告诉您的一般情况是:
- 子class中的重写方法从不继承原始父class方法的注解。
- 在实现接口的class中,实现方法从不从相应的接口方法继承注解。
- 实现接口的 classes 从不 从接口本身继承注解。
- 扩展另一个接口的接口也从不继承任何类型或方法级别的注释。
- 默认情况下,即使是子class 也不会继承其父class 的注解。
- 这个"annotations are never inherited"规则有一个例外:类型级别注释(类似于
@Foo class Base
,也可以是抽象的)可以 被子class 继承(类似class Sub extends Base
)当且仅当 注释 class 本身带有元注释 @Inherited
.
话虽如此并查看 @Retry
注释,您会注意到那里没有 @Inherited
注释,因此它也不适用于您的情况。
如果有其他方法(例如通过反射)在 Resilience4j 中完成此操作,我不知道,因为正如我所说,我以前从未使用过它。
我在 SpringBoot 中使用 resilience4j。我看到只有将 resilience4j 注释放在 class 中才会引发异常。如果 class 由另一个 class 扩展并且 parent class 有注释,则重试不起作用。
Resilience4j 配置
resilience4j.retry:
instances:
service:
maxRetryAttempts: 5
waitDuration: 1000
retryException:
- com.common.exception.RetriableException
Parent Class
@Retry(name = "service")
@Component
public class httpClient extends client{
// This method is invoked from outside
public HttpResponse<T> getResponse(
String url, Class<T> responseType) {
return super.getResponse(url, requestEntity, responseType);
}
}
Child Class
@Retry(name = "service") // Without this line, the retries don't work, even though it is present in the parent class
@Component
public class client{
public HttpResponse<T> getResponse(
String url, Class<T> responseType) {
//Impl which throws RetriableException
}
}
这是预期的行为吗?如果我遗漏了什么,你能告诉我吗
我以前从未使用过 Resilience4j,但关于 Java 注释,我可以告诉您的一般情况是:
- 子class中的重写方法从不继承原始父class方法的注解。
- 在实现接口的class中,实现方法从不从相应的接口方法继承注解。
- 实现接口的 classes 从不 从接口本身继承注解。
- 扩展另一个接口的接口也从不继承任何类型或方法级别的注释。
- 默认情况下,即使是子class 也不会继承其父class 的注解。
- 这个"annotations are never inherited"规则有一个例外:类型级别注释(类似于
@Foo class Base
,也可以是抽象的)可以 被子class 继承(类似class Sub extends Base
)当且仅当 注释 class 本身带有元注释@Inherited
.
话虽如此并查看 @Retry
注释,您会注意到那里没有 @Inherited
注释,因此它也不适用于您的情况。
如果有其他方法(例如通过反射)在 Resilience4j 中完成此操作,我不知道,因为正如我所说,我以前从未使用过它。