[英]How do I get the result of an RetryTemplate.execute in Spring java?
我对java和spring还是相当RetryTemplate.execute
,我试图弄清楚如何接收RetryTemplate.execute
命令的结果。 我想返回一个false
,如果执行命令失败,和一个true
,如果它成功了。 我试过在execute
函数中分配res的值,但是我得到的只是一个错误,说java: local variables referenced from a lambda expression must be final or effectively final
这是我的代码:
private boolean forward(String message) {
boolean res;
retryTemplate.execute(retryCallback -> {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
ResponseEntity<String> responses = restTemplate.postForEntity(kafkaForwarderSetting.getUrlEndpoint(),
new HttpEntity<>(message, headers), String.class);
if (responses.getStatusCodeValue() > 300) {
throw new ForwarderException("Error occurred while forwarding message to endpoint!",
retryCallback.getLastThrowable());
}
// SET res to true
return true;
}, recoveryCallback -> {
// SET res to false
return false;
});
return res;
}
从文档看来, execute
在retryTemplate
上返回<T, E extends Throwable>
,并且每当我返回该值(例如return true;
在第12行)时,我都应该能够访问该值。
但是我不知道如何获取并打印出retryTemplate
本身给了我org.springframework.retry.support.RetryTemplate@5d65976d
编译错误
local variables referenced from a lambda expression must be final or effectively final
意味着在Java中,您无法更改在内部lambda之外声明的变量的引用。
为了避免这种情况,可以使用Apache Commons Lang 3库中的MutableBoolean
。
首先,将该库包含到您的pom.xml中:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8.1</version>
</dependency>
然后,使用以下命令将MutableBoolean
导入您的类中
import org.apache.commons.lang3.mutable.MutableBoolean;
现在,更换
boolean res;
同
final MutableBoolean res = new MutableBoolean();
final
是可选的,但是好的做法。
要设置值,请写
res.setValue(true);
要么
res.setValue(false);
您可以使用以下三种方法之一来获取lambda之后的值:
boolean isFalse = res.isFalse();
boolean isTrue = res.isTrue();
Boolean value = res.getValue();
请注意, res.getValue()
将为您提供一个装箱的Boolean
,而其他两个方法为您提供一个未装箱的boolean
。 这些对于if
语句非常有用。
我希望这有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.