Spring-retry @Recover方法仅在接口定义中起作用

时间:2018-10-11 16:36:16

标签: java spring spring-retry

我正在使用spring-retry为我的业务逻辑提供重试策略。我有接口和实现它的服务<​​/ p>

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 :(得分:0)

我提交了open pull request to fix this

要解决此问题,请使用@EnableRetry(proxyTargetClass = true)