我有一个 Spring Boot 控制器,它进行两次服务调用。第二个调用应该只在 10 秒后发生,在从第一个调用得到响应后。
public SomeResponse myAction() {
res = serviceCallA();
waitFor(10) {
serviceCallB();
}
return res;
}
Run Code Online (Sandbox Code Playgroud)
该操作不必等待来自 serviceCallB() 的响应来返回响应。对 serviceCallB() 的调用只需在单独的线程中触发。
实现这一点的最佳方法是什么?我需要类似 ThreadPoolTaskExecutor 的东西,但有延迟。
示例代码会很棒..
非常直接的答案;
SomeResponse myAction() {
res = serviceCallA();
serviceCallB();
return res;
}
@Async
void serviceCallB() {
Thread.sleep(10000) // 10 secs
// do service B call stuff
}
Run Code Online (Sandbox Code Playgroud)
更多关于 @Async with Spring 的信息还有这个
但请注意,因为这些调用将在新线程中运行这些serviceCallB()逻辑,如果在没有适当控制的情况下使用,可能会导致内存问题并杀死您的服务器。
| 归档时间: |
|
| 查看次数: |
9334 次 |
| 最近记录: |