Метод Spring-retry @Recover работает только в определении интерфейса

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

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


person puffy.bun    schedule 11.10.2018    source источник


Ответы (1)


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

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

person Gary Russell    schedule 11.10.2018
comment
Эта проблема исправлена ​​или еще не решена? - person Chamin Wickramarathna; 19.11.2019
comment
Запрос на вытягивание все еще открыт; Я предлагаю вам сделать комментарий там. - person Gary Russell; 19.11.2019