栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用Spring制作异步REST?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用Spring制作异步REST?

响应正文为空,因为在

@Async
UserRepository类的findEmail方法中使用了注释,这意味着没有数据返回到下面的句子,
Useruser =userRepository.findByEmail(email);
因为findByEmail方法正在其他线程上运行,并且将返回null而不是List对象。

@Async
当您声明该注释
@EnableAsync
仅在使用时才发生时
@EnableAsync
,便启用了该注释,因为它激活了findEmail方法的@Async以便在其他线程上运行它。

该方法

returnuserService.findByEmail(email);
将返回
CompletableFuture
UserService
类创建的对象。

与第二个方法调用的不同之处在于,该

thenApplyAsync
方法将创建一个
CompletableFuture
与前一个方法完全不同的新方法,
userService.findByEmail(email)
并且仅返回第一个方法的用户对象
CompletableFuture

 return userService.findByEmail(email).thenApplyAsync(user -> {      return user;    })

如果要获得预期的结果,只需

@Async
从findByEmail方法中删除注释,最后添加
@EnableAsync
注释

如果您需要澄清如何使用异步方法的想法,可以说您必须调用三个方法,每个方法需要2秒钟才能完成,在正常情况下,您将其称为method1,然后称为method2,最后称为method3。整个请求将花费6秒。激活异步方法后,您可以调用其中三个,而只需等待2秒钟而不是6秒钟。

将此长方法添加到用户服务中:

@Asyncpublic  CompletableFuture<Boolean> veryLongMethod()  {    try {        Thread.sleep(2000L);    } catch (InterruptedException e) {        e.printStackTrace();    }    return CompletableFuture.completedFuture(true);}

然后从Controller调用它三遍

  @RequestMapping(value = "test")  public @ResponseBody CompletableFuture<User> test(@RequestParam(value = "email", required = true) String email) throws InterruptedException {        CompletableFuture<Boolean> boolean1= siteService.veryLongMethod();        CompletableFuture<Boolean> boolean2= siteService.veryLongMethod();        CompletableFuture<Boolean> boolean3= siteService.veryLongMethod();        CompletableFuture.allOf(boolean1,boolean2,boolean3).join();    return userService.findByEmail(email);  }

最后测量响应所花费的时间,如果花费了6秒钟以上,则说明您未运行Async方法,如果花费了2秒钟,则说明您成功了。

另请参阅以下文档:@Async
Annotation
,Spring异步方法,CompletableFuture类

希望对您有所帮助。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/410579.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号