Spring Batch FlatFileItemWriter - удалить временный файл после обработки - PullRequest
0 голосов
/ 20 сентября 2019

В моей весенней партии есть приложение FlatFileItemWriter, работающее в приложении весенней загрузки.Автор создает файл во временном местоположении, и оттуда файл FTPd.Мне нужно удалить файл после FTP.Но удаление файла не работает.При обычном удалении Windows это показывает, что Файл открыт в Java (VM)Я должен использовать setAppend (true) в моем писателе.Любая идея, как решить эту проблему?

Код

public Step step1() {
    return stepBuilderFactory.get("step1").<Model, Model> chunk(10)
            .reader(Reader())
            .processor(Processor())
            .writer(ItemWriter(ItemWriterClassifier()))
            .build();
}

 public Step step2() {
  return stepBuilderFactory.get("step2").tasklet((contribution, chunkcontext) -> {
    FileUtils.cleanDirectory(new File(path));
      return RepeatStatus.FINISHED;
      }).build();
  }
public Classifier<Model, ItemWriter<? super Model>> ItemWriterClassifier() {
  return Model -> {

        FlatFileItemWriter<Model> itemWriter = new FlatFileItemWriter<>();
        itemWriter.setResource(new FileSystemResource(new File(path)));
        itemWriter.setAppendAllowed(true);
        itemWriter.setLineAggregator(new DelimitedLineAggregator<Model>() {{
            setDelimiter(",");
            setFieldExtractor(FieldExtractor());
        }});


    itemWriter.open(new ExecutionContext());
    return itemWriter;
  };
}

Исключение:

java.io.IOException: Невозможно удалить файл: C: \ Users \\ AppData \Local \ Temp \ File_F.txt в org.apache.commons.io.FileUtils.forceDelete (FileUtils.java:2400) ~ [commons-io-2.6.jar: 2.6] в org.apache.commons.io.FileUtils.cleanDirectory(FileUtils.java:1721) ~ [commons-io-2.6.jar: 2.6] в com.bil.po.batch.DmsJob.lambda $ 0 (DmsJob.java:119) ~ [classes /: na] в org.springframework.batch.core.step.tasklet.TaskletStep $ ChunkTransactionCallback.doInTransaction (TaskletStep.java:406) ~ [spring-batch-core-4.0.1.RELEASE.jar: 4.0.1.RELEASE] в org.springframework.batch.core.step.tasklet.TaskletStep $ ChunkTransactionCallback.doInTransaction (TaskletStep.java:330) ~ [spring-batch-core-4.0.1.RELEASE.jar: 4.0.1.RELEASE] в org.springframework.transaction.support.TransactionT.execute (TransactionTemplate.java:140) ~ [spring-tx-5.0.6.RELEASE.jar: 5.0.6.RELEASE] в org.springframework.batch.core.step.tasklet.TaskletStep $ 2.doInChunkContext (TaskletStep.java:272) ~ [spring-batch-core-4.0.1.RELEASE.jar: 4.0.1.RELEASE] в org.springframework.batch.core.scope.context.StepContextRepeatCallback.doInItate (StepContextRepeatCallback.jpg: 81) ~ [spring-batch-core-4.0.1.RELEASE.jar: 4.0.1.RELEASE] в org.springframework.batch.repeat.support.RepeatTemplate.getNextResult (RepeatTemplate.java:375) ~ [spring-batch -structure-4.0.1.RELEASE.jar: 4.0.1.RELEASE] в org.springframework.batch.repeat.support.RepeatTemplate.executeInternal (RepeatTemplate.java:215) ~ [spring-batch -structure-4.0.1.RELEASE.jar: 4.0.1.RELEASE] в org.springframework.batch.repeat.support.RepeatTemplate.iterate (RepeatTemplate.java:145) ~ [spring-batch -structure-4.0.1.RELEASE.jar: 4.0.1.RELEASE] at org.springframework.batch.core.step.tasklet.TaskletStep.doExecute (TaskletStep.java:257) ~ [spring-batch-core-4.0.1.RELEASE.jar: 4.0.1.RELEASE] вorg.springframework.batch.core.step.AbstractStep.execute (AbstractStep.java:200) ~ [spring-batch-core-4.0.1.RELEASE.jar: 4.0.1.RELEASE] at org.springframework.batch.core.job.SimpleStepHandler.handleStep (SimpleStepHandler.java:148) [spring-batch-core-4.0.1.RELEASE.jar: 4.0.1.RELEASE]в org.springframework.batch.core.job.flow.JobFlowExecutor.executeStep (JobFlowExecutor.java:66) [spring-batch-core-4.0.1.RELEASE.jar: 4.0.1.RELEASE] в org.springframework.batch.core.job.flow.support.state.StepState.handle (StepState.java:67) [spring-batch-core-4.0.1.RELEASE.jar: 4.0.1.RELEASE] в org.springframework.batch.core.job.flow.support.SimpleFlow.resume (SimpleFlow.java:169) [spring-batch-core-4.0.1.RELEASE.jar: 4.0.1.RELEASE] в org.springframework.batch.core.job.flow.support.SimpleFlow.start (SimpleFlow.java:144) [spring-batch-core-4.0.1.RELEASE.jar: 4.0.1.RELEASE] в org.springframework.batch.core.job.flow.FlowJob.doExecute(FlowJob.java:136) [spring-batch-core-4.0.1.RELEASE.jar: 4.0.1.RELEASE] в org.springframework.batch.core.job.AbstractJob.execute (AbstractJob.java:308) [весенне-периодического ядро-4.0.1.RELEASE.jar: 4.0.1.RELEASE] at org.springframework.batch.core.launch.support.SimpleJobLauncher $ 1.run (SimpleJobLauncher.java:141) [spring-batch-core-4.0.1.RELEASE.jar: 4.0.1.RELEASE] в org.springframework.core.task.SyncTaskExecutor.execute (SyncTaskExecutor.java:50) [spring-core-5.0.6.RELEASE.jar: 5.0.6.RELEASE] в org.springframework.batch.core.launch.support.SimpleJobauncвыполнить (SimpleJobLauncher.java:134) [spring-batch-core-4.0.1.RELEASE.jar: 4.0.1.RELEASE] в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) ~ [na: 1.8.0_144]

Спасибо

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