我有一个非常简单的控制器,如下所示:
@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 --> Service --> Repository
现在,我希望我的所有 Rest API 都支持异步。在这种情况下,服务调用存储库来查询数据。我应该将@Async 注释放在FoodService 的方法中以使查询任务异步吗?
@Async
public List<Food> findByNameMatching(String name) {
return foodRepository.findMatchName(name);
}
在扩展中,我是否应该将@Async注释放在我的所有服务方法以使我的应用程序完全支持异步?
据我所知,Spring 中的 @Async 注解支持异步,而Callable和DeferredResult做同样的事情,那我应该选择哪一个呢?