Можно ли не записывать данные в файл в случае наличия каких-либо исключений или как лучше всего удалить указанный файл в случае возникновения каких-либо ошибок?
В настоящее время я использую пользовательское средство записи, которое расширяет FlatFileItemWriter для записи данных, я столкнулся с проблемой, из-за которой проверка не выполняется в моем пользовательском процессоре, и я выбрасываю пользовательское исключение, а статус выхода шага помечен как FAILED, как и ожидалось, однако есть некоторые частичные данные в файле, в который я пишу, как требование, этот файл не может содержать частичные данные, это должны быть все данные, когда нет ошибок, если есть какие-либо ошибки, будь то в Читателе, Процессор или писатель, то файл вообще не должен создаваться.
Я не могу пропустить или отфильтровать запись, не прошедшую проверку, поскольку любые отсутствующие записи в этом файле будут считаться удаленными, что может быть не так.
Итак, как я могу убедиться, что любой файл, в который выполняется запись, будет удален в случае возникновения какой-либо ошибки в процессе шага?
Я нашел решение, которое кажется хакерским, в котором я реализую StepExecutionListener
в своем писателе и делаю следующее:
this.errorDetected
— это просто флаг в моем писателе, который устанавливается в значение true, когда какая-либо проверка не удалась.
@Override
ExitStatus afterStep(StepExecution stepExecution) {
ExitStatus exitStatus;
if (this.errorDetected || stepExecution.exitStatus == ExitStatus.FAILED) {
if (this.fileImWritingTo.getFile().exists()) {
this.fileImWritingTo.getFile().delete();
}
exitStatus = ExitStatus.FAILED.addExitDescription("Validation failed");
return exitStatus;
} else {
return stepExecution.exitStatus;
}
}
Это хорошее решение? Или посоветуете что-то лучше?
Спасибо!