gpt4 book ai didi

java - 我应该在每个服务方法上放置 @Async 以使我的应用程序完全支持 Spring 中的异步吗?

转载 作者:行者123 更新时间:2023-12-01 10:16:15 24 4
gpt4 key购买 nike

我有一个非常简单的 Controller ,如下所示:

    @RequestMapping(value = "food", method = RequestMethod.POST)
public ResponseEntity<?> getAll(@RequestParam("term") String term) {

List<Food> foods = foodService.findByNameMatching(term);

return new ResponseEntity<>(foods, HttpStatus.OK);
}

服务:

@Service
@Transactional
public class FoodService {

@Autowired
private FoodRepository foodRepository;


public List<Food> findByNameMatching(String name) {
return foodRepository.findMatchName(name);
}
}

FoodRepository 只是一个 JpaRepository 。

到目前为止,流程是: Controller --> 服务 --> 存储库

目前,我希望我的所有 Rest API 都支持异步。在这种情况下,服务调用存储库来查询数据。我是否应该在 FoodService 的方法上添加 @Async 注解来使查询任务异步?

@Async
public List<Food> findByNameMatching(String name) {
return foodRepository.findMatchName(name);
}

此外,我是否应该在我的服务的所有方法中添加 @Async 注释以使我的应用程序完全支持异步?

据我所知,Spring中的@Async注解支持异步,而CallableDeferredResult则做同样的事情,那么哪种情况我应该选择哪一种?.

最佳答案

@Async 与服务中的Future 和 Controller 中的DefferedResult 结合使用。请参阅http://spring.io/guides/gs/async-method/

您的 FoodService.findByNameMatching 必须返回 java8 CompetableFuture 或 Spring ListenableFuture 或只是 Future。您的 Controller 将返回 DeferedResult。

@Async
public CompletableFuture<List<Food>> findByNameMatching(String name) {
return CompletableFuture.completedFuture(foodRepository.findMatchName(name));
}

不要忘记使您的应用程序异步启用。使用 Spring Boot,您可以使用 @EnableAsync。

那些你想要异步工作的API应该根据上面的注释进行更改。

关于java - 我应该在每个服务方法上放置 @Async 以使我的应用程序完全支持 Spring 中的异步吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35874609/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com