【发布时间】:2019-02-22 19:43:34
【问题描述】:
我尝试使用 Callable 选项设置函数调用超时,同时在 Spring Boot 的配置文件 (spring.mvc.async.request-timeout) 中设置超时持续时间。
设置超时后代码确实返回,但问题是函数本身继续执行。
我无权访问该函数的源代码,因为它是第三方 libaray,因此我无法在该代码中设置中断检查。
有没有办法在超时结束后强制终止函数/线程?我在这里使用了错误的路径吗?还有其他方法可以实现这个目标吗?
当前代码的示例,在超时后“返回”,但并没有真正停止在后台执行该代码:
@RequestMapping(value = "/api/test", method = RequestMethod.POST, produces = "application/json")
public Callable<ResponseEntity<String>> test(@RequestParam(...) Boolean bbb) {
return new Callable<ResponseEntity<String>>() {
@Override
public ResponseEntity<String> call() throws Exception {
try {
<POTENTIALLY LONG 3RD-PARTY FUNCTION CALL HERE>
.....
} catch (Exception e) {
return new ResponseEntity<String>("..." }", HttpStatus.BAD_REQUEST);
}
}
};
}
谢谢。
【问题讨论】: