Удалите файл в Spring Batch с помощью тасклета, но необходимо выйти из предыдущего шага - PullRequest
0 голосов
/ 11 января 2019

У меня есть тасклет в весеннем пакете, который используется для удаления файла, в котором находится временная папка 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();
    }

Если вам нужно больше объяснений по этому поводу, пожалуйста, дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...