CompletableFuture对象可以作为Controller层的最终视图对象返回么?

神蜗牛 java开发工程师  2019-07-04 08:54:34
例如这样写:
@RequestMapping("/search")
@ResponseBody
public CompletableFuture<JsonResult> search(Request request){
}

最近在项目中service层用CompletableFuture做了异步处理,但是返回的对象都变成了CompletableFuture的包装类,
想要按传统的对象返回,只能join或者get,那线程就会阻塞,异步处理就不是最好的性能了。

如何可以返回的话,具体应该怎么实现,spring内部有实现对CompletableFuture的回调么

不可以的话,想问问怎么实现异步化的controller层,谢谢
...全文
243 点赞 收藏 7
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
神蜗牛 2019-07-08
引用 4 楼 浪费七年时间 的回复:
Servlet容器开启异步支持(比如tomcat),在controller调用CompletableFuture.get()获取结果,用DeferredResult或Callable包装返回

get方法不是会阻塞线程,之前我在别的项目中调用的时候,整个服务都瘫痪了
回复
神蜗牛 2019-07-08
引用 6 楼 浪费七年时间 的回复:
[quote=引用 5 楼 神蜗牛 的回复:]
[quote=引用 4 楼 浪费七年时间 的回复:]
Servlet容器开启异步支持(比如tomcat),在controller调用CompletableFuture.get()获取结果,用DeferredResult或Callable包装返回

get方法不是会阻塞线程,之前我在别的项目中调用的时候,整个服务都瘫痪了[/quote]

get方法阻塞线程有什么问题吗?

以tomcat(支持Servlet 3.0的)为例,你controller方法指定返回DeferredResult或Callable,spring会自动进行异步处理,将方法以及响应的任务交给spring默认或者你定义的taskExecutor线程池bean执行,原本tomcat负责处理请求的线程返回tomcat线程池,不影响servlet接受请求的能力。要阻塞也是taskExecutor线程池里的线程,而不是tomcat线程池的线程。
[/quote]

这样,终于搞明白了,谢谢
回复
引用 5 楼 神蜗牛 的回复:
[quote=引用 4 楼 浪费七年时间 的回复:] Servlet容器开启异步支持(比如tomcat),在controller调用CompletableFuture.get()获取结果,用DeferredResult或Callable包装返回
get方法不是会阻塞线程,之前我在别的项目中调用的时候,整个服务都瘫痪了[/quote] get方法阻塞线程有什么问题吗? 以tomcat(支持Servlet 3.0的)为例,你controller方法指定返回DeferredResult或Callable,spring会自动进行异步处理,将方法以及响应的任务交给spring默认或者你定义的taskExecutor线程池bean执行,原本tomcat负责处理请求的线程返回tomcat线程池,不影响servlet接受请求的能力。要阻塞也是taskExecutor线程池里的线程,而不是tomcat线程池的线程。
回复
Servlet容器开启异步支持(比如tomcat),在controller调用CompletableFuture.get()获取结果,用DeferredResult或Callable包装返回
回复
神蜗牛 2019-07-05
引用 1 楼 浪费七年时间 的回复:
https://docs.spring.io/spring/docs/5.1.8.RELEASE/spring-framework-reference/web.html#mvc-ann-async

可以返回CompletableFuture<JsonResult>这个对象吗,比较现在service层已经包装成这个对象了
回复
神蜗牛 2019-07-05
可以返回CompletableFuture<JsonResult>这个对象吗,比较现在service层已经包装成这个对象了
回复
https://docs.spring.io/spring/docs/5.1.8.RELEASE/spring-framework-reference/web.html#mvc-ann-async
回复
发动态
发帖子
Web 开发
创建于2007-09-28

7.9w+

社区成员

Java Web 开发
申请成为版主
社区公告
暂无公告