【发布时间】:2017-03-11 10:01:36
【问题描述】:
我使用 Spring Boot 和 Spring Initializr 制作了一个简单的 Web 应用程序,并尝试使用 @Around 建议编写 @Aspect。
当我将自定义注释 @RetryOnFailure 添加到控制器的端点方法时 - 它可以工作,但是当我将此注释添加到控制器端点执行的控制器方法时 - 它不会工作。我花了很多时间来了解这种行为的原因,但没有任何结果。所以请帮忙。
项目位于:https://github.com/zalizko/spring-aop-playground
@Aspect
@Component
public final class MethodRepeater {
@Around("execution(* *(..)) && @annotation(RetryOnFailure)")
public Object wrap(final ProceedingJoinPoint joinPoint) throws Throwable {
// code is here
}
}
所以,我的目标是:
@RequestMapping
public String index() {
inTry();
return "OK";
}
@RetryOnFailure(attempts = 3, delay = 2, unit = TimeUnit.SECONDS)
public void inTry() {
throw new RuntimeException("Exception in try " + ++counter);
}
【问题讨论】:
-
inTry()总是抛出异常。这有意义吗? -
只是举例。我有真正的项目,需要的地方。如果某些外部资源不可用,则需要实现“重试”功能。
标签: java aop spring-aop