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!");

    }

}

我真的不想在界面中公开我的恢复方法(因为它似乎是我的内部逻辑),但由于这个问题我不能。任何人都可以建议什么可能是一个问题?


德玛西亚99
浏览 169回答 1
1回答

森林海

我提交了一个开放的拉取请求来解决这个问题。作为解决方法,请使用@EnableRetry(proxyTargetClass = true).
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java