В моей весенней партии есть приложение 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]
Спасибо