При чтении xml файла в методе @Asynk Spring Boot Чтение файла происходит со второго вызова метода

Рейтинг: 0Ответов: 1Опубликовано: 09.06.2023

Вызываю метод importToDB из контроллера:

@Async
public CompletableFuture<String> importToDB(final MultipartFile file, int num) {
    System.out.println("Выполняем в потоке: " + Thread.currentThread().getName() + "num = " + num);
    numOfTask.put(num, "IN PROGRESS");
    Workbook workbook;
    try {
        workbook = new XSSFWorkbook(file.getInputStream());
    } catch (IOException exception) {
        numOfTask.put(num, "ERROR");
        System.out.println(exception);
        return CompletableFuture.completedFuture("Ошибка открытия файла" + file.getName() + " thread: " + Thread.currentThread().getName());
   }
   Sheet datatypeSheet = workbook.getSheetAt(0);
   Iterator<Row> iterator = datatypeSheet.iterator();
   // .....
}

После запуска Spring Boot приложения первое обращение к этому методу вываливается на IOException:

java.nio.file.NoSuchFileException: C:\Users\Leonid\AppData\Local\Temp\tomcat.8080.86797283140162075\work\Tomcat\ локальный\ROOT\upload_c86caecb_7a98_472b_8ebb_c6342c71c40a_00000000.tmp

Последующие вызовы метода отрабатывают без ошибок. В чем может быть проблема? Может, я что-то упустил.

Ответы

▲ 1

Решил тем, что передаю из контроллера в сервис InputStream (MultipartFile.getInputStream()).

@Async
public CompletableFuture<String> importToDB(InputStream inputStream, int num){
    //.....
}