У меня есть тасклет в весеннем пакете, который используется для удаления файла, в котором находится временная папка java. В моей работе после выполнения основного шага я создал один тасклет, который удалит файл как второй шаг.
Требования: я хочу удалить файл независимо от того, выполняется ли задание со статусом выполнено или не выполнено, и хочет сохранить статус основного шага.
Теперь, что происходит, если я использовал следующую в конфигурации задания для передачи тасклета, то файл не удаляется в случае сбоя задания на главном шаге.
Если я использую пошаговый поток для запуска тасклета, если основной шаг не пройден или не выполнен, я не могу использовать состояние основного шага.
В примере ниже step1 - основной шаг, а step3 - тасклет
Tasklet:
/**
* Tasklet execution for remove file from local directory.
*
* @param contribution the contribution object
* @param chunkContext the chunck context object
* @return the response status
*/
@Override
public RepeatStatus execute(final StepContribution contribution, final ChunkContext chunkContext) throws Exception {
final String fileName = chunkContext.getStepContext().getJobParameters().get("fullPathFileName").toString();
log.info("Delete the file from local directory {} ", fileName);
boolean deleted = Files.deleteIfExists(Paths.get(fileName));
if (!deleted) {
throw new UnexpectedJobExecutionException("Could not delete file " + fileName);
}
log.info("File removed successfully");
return RepeatStatus.FINISHED;
}
Job Configuration With Step Flow:
public Job postalJob(ItemReader<PostalDto> postalReader) {
return this.jobBuilderFactory.get("postalJob").incrementer(new RunIdIncrementer()).flow(step1(postalReader)).on("*").to(step3()).end().listener(batchJobListener()).build();
}
Job Configuration without step flow:
public Job postalJob(ItemReader<PostalDto> postalReader) {
return this.jobBuilderFactory.get("postalJob").incrementer(new RunIdIncrementer()).flow(step1(postalReader)).next(step3()).end().listener(batchJobListener()).build();
}
Tasklet Configuration:
@Bean
public Step step3() {
return stepBuilderFactory.get("taskletStep").tasklet(fileDeletingTasklet()).build();
}
Если вам нужно больше объяснений по этому поводу, пожалуйста, дайте мне знать.