- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 java 和 spring 相当陌生,我正在尝试弄清楚如何接收 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
返回<T, E extends Throwable>
关于retryTemplate
每当我返回该值(例如第 12 行的 return true;
)时,我应该能够访问该值。
但是我不知道如何获取它并打印出 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
语句。
我希望这会有所帮助。
关于java - 如何在 Spring java 中获取 RetryTemplate.execute 的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53647982/
在下面的方法中,我使用重试逻辑,我期望第一次尝试应该失败,第二次尝试应该成功保存。 public Record saveRecord(Record Record) { try
在我的一个类(class)中,我想在 SimpleRetryPolicy 和 FixedBackOffPolicy 中使用带有特定参数的 spring 类 RetryTemplate。 RetryTe
是否可以修改我的重试模板以在引发 AssertionError 时重试?如果是这样,怎么办? 这是我的 RetryTemplate bean,使用它不会捕获 AssertionErrors: @Con
我试图理解 spring-retry,我看到了两种方法,第一种方法很简单 @Retryable(value = {SomeException1.class,SomeException2.cla
我正在从事一个 Spring 项目,并且正在尝试为 RabbitMQ 队列实现带有死信的指数退避。 在此过程中,我创建了一个死信队列和一个死信交换 (Fanout),并将原始队列的 x-dead-le
我正在使用 spring-retry(使用 java 8 lambda)重试失败的 REST 调用。我只想重试那些返回 500 错误的调用。但是我无法为此配置重试模板 bean。目前这个bean很简单
我目前正在为以下方法编写单元测试 @Autowired private RequestConfig requestConfig; @Autowired private RetryTemplate re
我对 java 和 spring 相当陌生,我正在尝试弄清楚如何接收 RetryTemplate.execute 的结果命令。我想退回false如果执行命令失败,并且 true如果成功的话。我尝试在
我正在使用 Spring AMQP 发送消息并能够对“自定义”异常执行重试。假设我有一个 Receiver,它抛出一个自定义异常“EventException”,为此,我希望有 n 次重试(在我们的示
我是一名优秀的程序员,十分优秀!