- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Rest Controller 扩展的 BaseRestController
类。它有一个我想异步运行的方法。
public abstract class BaseRestController {
...
@Async("someThreadPoolTaskExecutor")
public void someAsyncTask() {
...
}
}
@RestController
public class MyRestController extends BaseRestController {
...
@GetMapping("/some/path")
public SomeEntity getSomething() {
...
this.someAsyncTask();
}
}
我已经使用注释启用了Async
,实现了一个获取someThreadPoolTaskExecutor
TaskExecutor等的方法。如果我将 @Async("someThreadPoolTaskExecutor")
放在 Service 的(用 @Service
注释的类)方法上,它会起作用,但如果我使用 someAsyncTask() 这样做在BaseRestController中,代码不会异步运行。用@Component 装饰类也不起作用。
Spring guide on Async也没有帮助。在它的演示中,它还演示了带有服务类的异步。
虽然在此过程中,我意识到我想要实现的行为最好委托(delegate)给服务类,但我很好奇为什么上述方法不起作用。
我正在使用 Spring Boot 的2.1.0.RELEASE。
最佳答案
@Async 有几个规则,您正在执行的自调用是行不通的 here
The reasons are simple – the method needs to be public so that it can be proxied. And self-invocation doesn’t work because it bypasses the proxy and calls the underlying method directly.
关于java - 异步不适用于 Controller 的抽象父类(super class)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60796112/
我是一名优秀的程序员,十分优秀!