Я использую spring-retry
для предоставления политики повторных попыток для моей бизнес-логики.У меня есть интерфейс и сервис, который реализует его
public interface MyInterface {
@Retryable(maxAttempts = 5, backoff = @Backoff(value = 0L))
void doSth() throws Exception;
@Recover
void recoverIfFailed(Exception e);
}
@Service
public class MyService implements MyInterface {
public void doSth() throws Exception {
throw new Exception();
}
public void recoverIfFailed(Exception e) {
System.out.println("Recovered!");
}
}
, и в этой конфигурации все работает нормально.Однако я не могу понять, почему я не должен перемещать аннотацию @Recovery
в реализацию интерфейса следующим образом:
@Service
public class MyService implements MyInterface {
@Retryable(maxAttempts = 5, backoff = @Backoff(value = 0L)) // -- this is working
public void doSth() throws Exception {
throw new Exception();
}
@Recover // -- this is not working!
public void recoverIfFailed(Exception e) {
System.out.println("Recovered!");
}
}
Я действительно хотел бы не раскрывать свой метод восстановления в интерфейсе (как мне кажется, мойвнутренняя логика) но не могу из-за этого вопроса.Кто-нибудь может посоветовать, в чем может быть проблема?