2016-03-22 2 views
0

У меня есть сценарий с несколькими файлами, которые нужно обрабатывать с помощью Spring Batch.Удалить файлы после обработки секционированного шага

Я реализовал это с помощью мастер-шага и секционированного подчиненного шага, который обрабатывает каждый файл отдельно через Partitioner. Он отлично работает, но теперь я хочу архивировать/удалять успешно обработанные файлы.

Я попробовал несколько способов, но не успех:

-in методом Afterstep на ведомый шаг StepExecutionListener но писатель держит блокировку файла

-в новый шаг после мастер шаг, но я не Не знаю, как получить успешно обработанные имена файлов, я думаю, что это информация, которая должна использоваться совместно с подчиненными шагами, также необходимо учитывать безопасность потоков. Этот подход также имеет тот недостаток, что он ждет завершения всех этапов ведомого.

Спасибо заранее, Адриан

ответ

0

если вы можете принять ждать все ведомые шаги до конца, прежде чем начать удаление файла вы можете достичь успешно обработанных имен файлов с

public class CustomTasklet implements Tasklet { 

    @Override 
    public RepeatStatus execute(final StepContribution contribution, final ChunkContext chunkContext) throws Exception { 
    Collection<StepExecution> stepExecutions = chunkContext.getStepContext().getStepExecution().getJobExecution().getStepExecutions(); 
    for (StepExecution stepExecution : stepExecutions) { 
     if (stepExecution.getExecutionContext().containsKey("fileName") 
      && ExitStatus.COMPLETED.equals(stepExecution.getExitStatus())) { 

     String file = stepExecution.getExecutionContext().getString("fileName"); 
     // delete file 

     } 
    } 
    } 
} 

если вы настроены MultiResourcePartitioner.keyName, вам нужно изменить «имя_файла» выше

+0

Привет, Майкл, Спасибо за ваш ответ, он работает. Я думаю, что нет решения для удаления файла после каждого подчиненного шага, поэтому я должен принять это. –