- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试 Spring 重试,但遇到了一个奇怪的问题。当我在 Rest Controller 中的方法上使用重试注释时,重试不起作用。但是,如果我将该方法移至单独的服务类,它就可以工作。以下代码不起作用:
@RestController
public class HelloController {
@RequestMapping(value = "/hello")
public String hello() {
return getInfo();
}
@Retryable(RuntimeException.class)
public String getInfo() {
Random random = new Random();
int r = random.nextInt(2);
if (r == 1) {
throw new RuntimeException();
} else {
return "Success";
}
}
}
@RestController
public class HelloController {
@Autowired
private SomeService service;
@RequestMapping(value = "/hello")
public String hello() {
String result = service.getInfo();
return result;
}
}
@Service
public class SomeService {
@Retryable(RuntimeException.class)
public String getInfo() {
Random random = new Random();
int r = random.nextInt(2);
if (r == 1) {
throw new RuntimeException();
} else {
return "Success";
}
}
}
@Retryable
在 Controller 中使用时不工作?
最佳答案
您看到的问题是由于您如何调用 getInfo()
方法。
在第一个示例中,您正在调用 getInfo()
来自同一个 spring 管理的 bean。在第二个示例中,您正在调用 getInfo()
来自不同的 Spring 管理 bean 。这种区别很微妙,但非常重要,很可能是导致您的问题的原因。
当您使用 @Retryable
注解,Spring 正在围绕您的原始 bean 创建一个代理,以便它们可以在特殊情况下进行特殊处理。在这种特定情况下,Spring 应用一个 Advice 将调用委托(delegate)给您的实际方法,捕获 RuntimeException
是它可能会抛出,并根据您的 @Retryable
的配置重试您的方法的调用注解。
此代理在您的情况下很重要的原因是只有外部调用者才能看到代理建议。您的 bean 不知道它被代理了,只知道它的方法正在被调用(通过代理建议)。当您的 bean 对其自身调用方法时,不涉及进一步的代理,这就是实际上不会发生重试的原因。
关于Spring重试在RestController中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36417493/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!