如何解决retryTemplate.execute 没有被调用
我正在使用如下的重试模板来处理可能发生的异常。 retryTemplate.execute 块永远不会被调用。我已经定义了 retrytemplate bean,如下所示。不确定这是否是正确的方法。我是java和spring的新手。任何帮助将不胜感激。
public class checkUser{
RetryTemplate retryTemplate;
public checkUser(){}
public checkUser(RetryTemplate retryTemplate){
this.retryTemplate = retryTemplate;}
private RetryTemplate retryConfig() {
RetryTemplate retryTemplate = new RetryTemplate();
FixedBackOffPolicy fixedBackOffPolicy = new FixedBackOffPolicy();
fixedBackOffPolicy.setBackOffPeriod(2000l);
retryTemplate.setBackOffPolicy(fixedBackOffPolicy);
SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
retryPolicy.setMaxAttempts(2);
retryTemplate.setRetryPolicy(retryPolicy);
return retryTemplate;
}
private void checkGroup() throws Exception {
retryTemplate = retryConfig();
try {
retryTemplate.execute(new RetryCallback<Object>() {
@Override
public Object doWithRetry(RetryContext retryContext) throws Exception {
if (retryContext.getRetryCount() < 2) { // unexpected disconnection
throw new RuntimeException("retry exception");
}
//do something
}
return null;
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}
定义的bean如下:
<bean id="checkUser"
class="com.checkUser">
<constructor-arg index="1" value="${retryTemplate}" />
</bean>
<bean id = "retryTemplate" class="com.checkUser">
</bean>
解决方法
Spring bean 是完全被动的;在调用 checkGroup()
之前不会调用执行。
您也不应该为每次调用都调用 retryConfig()
,这只会覆盖传递给构造函数的那个。
您的 XML 配置完全没有意义。
您需要 <constructor-arg ref="templateBean"/>
,其中 templateBean
是 RetryTemplate
类型的 bean。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。