Spring-retry метод @Recover работает только в определении интерфейса - PullRequest
0 голосов
/ 11 октября 2018

Я использую 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!");
    }
}

Я действительно хотел бы не раскрывать свой метод восстановления в интерфейсе (как мне кажется, мойвнутренняя логика) но не могу из-за этого вопроса.Кто-нибудь может посоветовать, в чем может быть проблема?

1 Ответ

0 голосов
/ 11 октября 2018

Я отправил открытый запрос извлечения, чтобы исправить это .

В качестве обходного пути используйте @EnableRetry(proxyTargetClass = true).

...