#java #spring-boot #spring-batch
#java #spring-boot #spring-batch
Вопрос:
У меня есть пакет spring, здесь я извлекаю файлы из папки, а затем читаю файл с помощью библиотеки OpenCV, код выглядит следующим образом.
List<SendingFile> sendCloudFile = new CsvToBeanBuilder<SendingFile>(new FileReader(file.getAbsolutePath(), StandardCharsets.UTF_8))
.withType(SendingFile.class)
.build()
.parse();
После этого, когда я пытаюсь удалить тот же файл, он выдает мне сообщение об ошибке. (Процесс не может получить доступ к файлу, потому что он используется другим процессом.)
Чего мне здесь не хватает?
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
if (stepExecution.getExitStatus().equals(ExitStatus.FAILED)) {
service.updateErrorStatus(mailApplicationId, null, null);
}
for (Map.Entry<String, String> processedFile : processedFileList.entrySet()) {
File newFile = new File(recoveryFolder, processedFile.getKey());
try {
Files.move(Paths.get(processedFile.getValue()), Paths.get(recoveryFolder, processedFile.getKey()), REPLACE_EXISTING);
} catch (Exception ex) {
log.warn("Error in moving the file. ");
log.warn(ex.getMessage());
}
}
return stepExecution.getExitStatus();
}
Ответ №1:
Это известная проблема: https://github.com/spring-projects/spring-batch/issues/1500 .
Обходной путь — использовать другой шаг для перемещения файла вместо того, чтобы делать это в прослушивателе.