RetryCallback类型的参数数量不正确

时间:2015-02-26 04:18:09

标签: java spring

我正在使用Spring的重试库来重试webservice调用,以防在服务中断或网络超时时发生任何错误。但是,我的代码中始终出现以下错误 - Incorrect number of arguments for type RetryCallback<T,E>; it cannot be parameterized with arguments <Object>。我实现逻辑的方法返回void,所以我基本上不能让retry调用返回任何东西。请告知我在这里犯了什么错误 -

 RetryTemplate retryTemplate = createRetryTemplate(3, 1000);
    return retryTemplate.execute(new RetryCallback<Object>() {
        @Override
        public Object doWithRetry(RetryContext context) throws Exception {
            userUpdateService.updateUser(userName, userID);
        }
    });

3 个答案:

答案 0 :(得分:2)

RetryCallback请求两个类型参数,一个返回类型和一个异常类型。

RetryTemplate retryTemplate = createRetryTemplate(3, 1000);
    return retryTemplate.execute(new RetryCallback<Object,Exception>() {
       @Override
       public Object doWithRetry(RetryContext context) throws Exception {
           userUpdateService.updateUser(userName, userID);
       }
    });

答案 1 :(得分:1)

RetryCallback的{​​{3}}指定了两种类型,您只指定了一种类型。

第二种类型是您将(可能)抛出的Throwable衍生物,例如Exception,您还需要指定:

RetryTemplate retryTemplate = createRetryTemplate(3, 1000);
return retryTemplate.execute(new RetryCallback<Object, Exception>() {
    @Override
    public Object doWithRetry(RetryContext context) throws Exception {
        userUpdateService.updateUser(userName, userID);
    }
});  

答案 2 :(得分:1)

类型RetryCallback接受两个泛型参数(返回类型和抛出的异常类型),但是只传递一个。

public interface RetryCallback<T, E extends Throwable> {
    T  doWithRetry(RetryContext context) throws E;
}

所以你想要像这样实例化它:

new RetryCallback<Object, Throwable>() { //...