Вы можете включить асинхронную обработку, включив ее через конфигурацию.
@Configuration
@EnableAsync
public class YourConfig
Теперь вы можете добавить службу и включить асинхронную обработку для одного из ее методов, пометив ее с помощью @Async
.Он вернется сразу после вызова.
@Async
public void asyncMethodOnAService() {}
Если вы хотите, чтобы сервис вернул значение, вы можете вернуть CompletableFuture
@Async
public CompletableFuture<String> asyncMethodOnAService() {}
Контроллер, который вызывает асинхронный методможет вернуть DeferredResult
, который сообщит клиенту, что результат будет доступен после завершения асинхронной обработки.
@RequestMapping(value = "/async", method = RequestMethod.GET)
public DeferredResult<ResponseEntity<String>> doAsync() {
DeferredResult<ResponseEntity<String>> result = new DeferredResult<>();
this.asyncService.asyncMethodOnAService().whenComplete((serviceResult, throwable) -> result.setResult(ResponseEntity.ok(serviceResult)));
return result;
}