Мой метод контроллера загружает данные и экспортирует в другой источник, здесь я хочу сделать это асинхронным

#spring-boot #asynchronous

Вопрос:

Здесь я хочу сделать приведенный ниже код асинхронным. Я прочитал, что @Async аннотации, если я добавлю эту аннотацию, достаточно ли этого, или в основном приложении также необходимо добавить сюда, необходимо также рассмотреть еще один момент, если я вызываю этот API несколько раз, второй вызов должен подождать до завершения первого вызова (пример: я позвонил в первый раз, для завершения может потребоваться 5 минут, но снова я снова вызвал в фоновом режиме первый вызов все еще выполнялся, после завершения первого вызова только тогда он должен запустить мой второй вызов).

 @Operation(summary = "load operation")
@PostMapping(value = "delta/load")
public void sendDeltaOutbound() {
    cppService.loadData();
}
 

Ответ №1:

У вас должно быть

 @SpringBootApplication
@EnableAsync
public class AsyncMethodApplication {

}
 

В методе обслуживания вы должны иметь @Async

 
@Service
public class FooService {

  @Async
  public BarFuture<Fuu> findFuuBaa(String baa) throws InterruptedException {
        // ...
  }

}
 

смотрите https://spring.io/guides/gs/async-method /

Комментарии:

1. покрывает ли это очередь запросов cal (как то, что я упоминал в вопросе), или нам нужно использовать аннотацию @Scheduled поверх этого.