#spring-boot #spring-batch
Вопрос:
У меня есть пакетное приложение spring, которое импортирует файлы excel и создает выходной файл excel со столбцом состояния, который может быть успешным или неудачным. В настоящее время приложение является рабочим файлом. Ниже приведен код для подготовки параметров задания
JobParameters jobParametersBuilder = new JobParametersBuilder().addString(TYPE, type)
.addString(NAME, name).addString(FULL_PATH_FILE_NAME, filePath)
.addLong(TIME, System.currentTimeMillis()).addString(OUTPUT_FILE_NAME, outputFile)
.addString(INPUT_FILE_NAME, inputFile).toJobParameters();
Как вы можете видеть, я указал имя выходного файла в параметрах.
Теперь, как упоминалось выше, в столбце статус выходных файлов Excel может быть два значения с может прийти. Есть ли какой-либо способ изменить имя файла output, если в столбце состояние есть некоторые ошибки
например: если в каком-либо столбце состояния нет ошибок, то имя вывода должно совпадать с предыдущим выводом-xyz_currentTimeStamp (имя образца), но если в столбце состояния есть ошибка, то имя файла должно быть выводом/ошибкой-xyz_currentTimeStamp (имя образца).
Мне было интересно, если имя уже указано в параметрах, то как можно динамически изменить имя файла в случае ошибки.
Комментарии:
1. Как рассчитывается/определяется этот статус? Пожалуйста, приведите пример с конкретными файлами ввода/вывода, чтобы они могли эффективно помочь вам.
2. Я добавил выходной файл. Входной файл такой же без столбца состояния. Если определенная строка в excel успешно сохранена в базе данных, то в выходном файле будет задан столбец состояния «УСПЕШНО» для этой конкретной строки, иначе может возникнуть какое-то исключение, например ошибка проверки, тогда это конкретное исключение будет задано в столбце состояния. Теперь предположим, что файл содержит исключение, тогда мы сможем назвать этот файл так, как указано выше в вопросе.
Ответ №1:
У вас есть два варианта:
- Заранее определите, что по крайней мере одна из строк, которые будут записаны, будет иметь статус «Исключение», и динамически настройте средство записи с правильным именем файла. Вы можете создать
Tasklet
шаг, который выполняет проверку и помещает информацию в контекст выполнения. Следующий шаг, ориентированный на фрагменты, может использовать средство записи с областью действия, которое динамически настраивается с предварительно вычисленным именем файла из контекста выполнения, что-то вроде:
@Bean
@StepScope
public FlatFileItemWriter itemWriter(@Value("#{jobExecutionContext['fileName']}") String fileName) {
return new FlatFileItemWriterBuilder()
.resource(new FileSystemResource(fileName))
// set other properties
.build();
}
- Используйте следующий шаг, который проверяет, имеет ли одна из написанных строк статус «Исключение», и соответствующим образом переименуйте файл