在控制器中使用@Async和ComppletableFuture可以提高我们的api的性能吗?
我试图实现的是,我能否通过使用@Async和ComppletableFuture来获得更好的性能,从而通过以这种简单的方式使用多线程来控制我的RESTApi?
这是我所做的,这是我的控制器:
@PostMapping("/store")
@Async
public CompletableFuture<ResponseEntity<ResponseRequest<CategoryBpsjResponseDto>>> saveNewCategoryBPSJ(@Valid @RequestBody InputRequest<CategoryBPSJRequestDto> request) {
CompletableFuture<ResponseEntity<ResponseRequest<CategoryBpsjResponseDto>>> future = new CompletableFuture<>();
future.complete(ResponseEntity.ok(new ResponseRequest<>("Okay", categoryBPSJService.save(request))));
return future;
}
与
@PostMapping("/store")
public ResponseEntity<ResponseRequest<CategoryBpsjResponseDto>> saveNewCategoryBPSJ(@Valid @RequestBody InputRequest<CategoryBPSJRequestDto> request) {
return ResponseEntity.ok(new ResponseRequest<>("okay", categoryBPSJService.save(request));
}
正如你在我的第一个控制器函数中看到的,我在我的函数响应上添加了ComppletableFuture,但是在我的服务中,我确实保存了这一行不是异步的,只是一个简单的函数,看起来像这样:categoryBPSJService.save(request)
public CategoryBpsjResponseDto save(InputRequest<CategoryBPSJRequestDto> request) {
CategoryBPSJRequestDto categoryBPSJDto = request.getObject();
Boolean result = categoryBPSJRepository.existsCategoryBPSJBycategoryBPSJName(categoryBPSJDto.getCategoryBPSJName());
if(result){
throw new ResourceAlreadyExistException("Category BPSJ "+ categoryBPSJDto.getCategoryBPSJName() + " already exists!");
}
CategoryBPSJ categoryBPSJ = new CategoryBPSJ();
categoryBPSJ = map.DTOEntity(categoryBPSJDto);
categoryBPSJ.setId(0L);
categoryBPSJ.setIsDeleted(false);
CategoryBPSJ newCategoryBPSJ = categoryBPSJRepository.save(categoryBPSJ);
CategoryBpsjResponseDto categoryBpsjResponseDto = map.entityToDto(newCategoryBPSJ);
return categoryBpsjResponseDto;
}
我只是返回具有JPA连接的简单对象,这样我的请求性能会提高吗?还是我错过了一些东西来增加它?或者无论是否使用CompletableFuture和@Async在我的控制器上都没有区别?
*注意:我的项目是基于java 13的