У меня есть очень простой контроллер:
@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.
Пока поток будет таким: Контроллер --> Сервис --> Репозиторий.
На данный момент я хочу, чтобы все мои Rest API поддерживали асинхронность. В этом случае служба вызывает репозиторий для запроса данных. Должен ли я поместить аннотацию @Async в метод FoodService, чтобы сделать задачу запроса асинхронной?
@Async
public List<Food> findByNameMatching(String name) {
return foodRepository.findMatchName(name);
}
Кроме того, должен ли я помещать аннотацию @Async во все методы моей службы, чтобы мое приложение полностью поддерживало асинхронность?
Насколько мне известно, аннотация @Async в Spring поддерживает асинхронность, в то время как Callable и DeferredResult делают одно и то же, так что какой вариант выбрать?