[英]Spring MVC async controller implementation with parameters
根據這篇博客,可以避免阻止HTTP請求線程等待更長的IO,使其異步。 在這里,單獨的線程負責在結果可用時返回結果。 基本實現如下
@RestController
public class RequestController {
private final TaskService taskService;
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
public RequestController(TaskService taskService) {
this.taskService = taskService;
}
@RequestMapping(value = "/callable", method = RequestMethod.GET, produces = "text/html")
public Callable<String> executeSlowTaskWithCallable() {
logger.info("Request received");
Callable<String> callable = taskService::execute;
logger.info("Servlet thread released");
return callable;
}
:
}
而不是“執行”(不帶參數並返回結果),我想創建Callable使用帶參數的方法並返回一些結果。 喜歡
Callable<String> callable = taskService.execute(request, headers);
怎么做到這一點?
只需使用lambda:
Callable<String> callable = () -> taskService.execute(request, headers);
像這樣:
@RestController
public class RequestController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private final TaskService taskService;
@Autowired
public RequestController(TaskService taskService) {
this.taskService = taskService;
}
@RequestMapping(value = "/callable", method = RequestMethod.GET, produces = "text/html")
public Callable<String> executeSlowTaskWithCallable() {
logger.info("Request received");
Object request, headers = // initialize variables
Callable<String> callable = () -> taskService.execute(request, headers);
logger.info("Servlet thread released");
return callable;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.