[英]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.