Ошибка обработки файла Spring Batch, мой ItemReader не закрыт - PullRequest
0 голосов
/ 04 марта 2019

Мне нужно добавить Spring Batch Job в мое приложение Spring Boot, мне нужно загрузить список файлов с FTP и обработать их.Это CSV-файлы.

Я создал работу только с одним шагом (я вернусь к этому вопросу позже).

На моем шаге у меня есть Reader (FlatFileItemReader), процессор(который преобразует мою сущность) и itemWriter, который записывает данные в мою базу данных.

Я хочу удалить файл, который я скачал после его обработки.

Чтобы поставить точку, я попыталсядобавить второй шаг, который оправдывает удаление файла после обработки.С этим шагом 2, иногда мой файл не удаляется.Это как мой ItemReader не закрывает inputStream, поэтому я держу обработчик на нем.

Я пробовал другое решение, использую пользовательский FlatItemReader, я переопределил метод close (), чтобы удалить файл после того, какзакрыто.Странная вещь случается с этим решением, мой метод close вызывается дважды, и иногда я могу удалить файл, а иногда я не могу удалить его ...

См. Журналы ниже:

o.s.b.c.l.support.SimpleJobLauncher      : Job: [SimpleJob: [name=job]] launched with the following parameters: [{time=1551704019790, PATH_TO_FILE=C:\tmp\tmpCorresp\ESPCORR_LITE2.CSV, organisationId=153}]
o.s.batch.core.job.SimpleStepHandler     : Executing step: [step1]
c.m.b.a.config.BatchConfig               : Do Close Started !!!!
c.m.b.a.config.BatchConfig               : start Deletion
c.m.b.a.config.BatchConfig               : File is not deleted
c.m.b.a.config.BatchConfig               : Do Close Started !!!!
c.m.b.a.config.BatchConfig               : start Deletion
c.m.b.a.config.BatchConfig               : File is not deleted
o.s.b.c.l.support.SimpleJobLauncher      : Job: [SimpleJob: [name=job]] completed with the following parameters: [{time=1551704019790, PATH_TO_FILE=C:\tmp\tmpCorresp\ESPCORR_LITE2.CSV, organisationId=153}] and the following status: [COMPLETED]
c.m.b.a.scheduled.TestTask               : FTP FILES FOR organisation2 DOWNLOADED
c.m.b.a.scheduled.TestTask               : Et BIM le flux !

код моего метода закрытия:

@Override
        public void close() throws ItemStreamException {
            super.close();
            deleteFileAfterClose();
        }

        private void deleteFileAfterClose(){
            log.debug("start Deletion");
            File f = null;
            try {
                f = resourceHandler.getFile();
            } catch (IOException e) {
                log.error("Error while retrieving file : ", e);
            }
            if(f != null && f.exists()){
                boolean delete = f.delete();
                if(delete){
                    log.debug("File is deleted");
                }
                else {
                    log.debug("File is not deleted");
                }
            }
        }

Я очень благодарен, если кто-то может мне помочь.

Спасибо !!!

С уважением.

Николас Сагон.

edit:

My BatchConfig.java:

@Configuration
@PropertySource("classpath:config/default.properties")
@EnableBatchProcessing
public class BatchConfig {

    private static final Logger log = LoggerFactory.getLogger(BatchConfig.class);

    @Autowired
    public JobBuilderFactory jobBuilderFactory;

    @Autowired
    public StepBuilderFactory stepBuilderFactory;

    @Autowired
    public CorrespondentDao correspondentDao;

    @Autowired
    public JobRepository jobRepository;

    @Bean
    public SimpleJobLauncher simpleJobLauncher() throws Exception {
        SimpleJobLauncher simpleJobLauncher = new SimpleJobLauncher();
        simpleJobLauncher.setJobRepository(jobRepository);
        simpleJobLauncher.setTaskExecutor(new SyncTaskExecutor());
        simpleJobLauncher.afterPropertiesSet();
        return simpleJobLauncher;
    }

    @Bean
    public Job job(Step step1, Step step2) {
        return jobBuilderFactory.get("job")
                .preventRestart()
                .start(step1)
                .next(step2)
                .build();
    }

    @Bean
    Step step1(FlatFileItemReader<CorrespondentEntity> reader, ItemWriter<CorrespondentEntity> writer) {
        return stepBuilderFactory
                .get("step1")
                .<CorrespondentEntity, CorrespondentEntity>chunk(1)
                .reader(reader)
                .processor(new Processor())
                .writer(writer)
                .build();
    }

    //step for deleting the file
    @Bean
    Step step2(FileDeletingTasklet deletingTask) {
        FileDeletingTasklet task = deletingTask;
        return stepBuilderFactory.get("step2")
                .allowStartIfComplete(true)
                .tasklet(task)
                .build();
    }

    @SuppressWarnings("Duplicates")
    @Bean
    @JobScope
    public FlatFileItemReader<CorrespondentEntity> reader(@Value("#{jobParameters['PATH_TO_FILE']}") String pathToFile ) throws MalformedURLException {
        FlatFileItemReader<CorrespondentEntity> reader = new CustomReader<>();

        reader.setResource(new FileUrlResource(pathToFile));
        reader.setLinesToSkip(1);
        reader.setLineMapper(new csvLineMapper());
        return reader;
    }

    @Bean
    @JobScope
    public ItemWriter<CorrespondentEntity> writer(CorrespondentDao correspondentDao, @Value("#{jobParameters['organisationId']}") Long organisationId){
        return new Writer(correspondentDao, organisationId);
    }

    @Bean
    @JobScope
    public FileDeletingTasklet deletingTask(@Value("#{jobParameters['PATH_TO_FILE']}") String pathToFile){
        return new FileDeletingTasklet(pathToFile);
    }

    private class CustomReader<T> extends FlatFileItemReader<T> implements ItemStream {

        private Resource resourceHandler;

        @Override
        public void setResource(Resource resource) {
            super.setResource(resource);
            this.resourceHandler = resource;
        }

        @Override
        public void close() throws ItemStreamException {
            super.close();
        }

        //Not used for the moment
        private void deleteFileAfterClose(){
            log.debug("start Deletion");
            File f = null;
            try {
                f = resourceHandler.getFile();
            } catch (IOException e) {
                log.error("Error while retrieving file : ", e);
            }
            if(f != null && f.exists()){
                boolean delete = f.delete();
                if(delete){
                    log.debug("File is deleted");
                }
                else {
                    log.debug("File is not deleted");
                }
            }
        }
    }
}

FileDeletingTasklet.java

import com.micropole.biomnis.authentification.scheduled.TestTask;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;

import java.io.File;

public class FileDeletingTasklet implements Tasklet {


    private static final Logger log = LoggerFactory.getLogger(TestTask.class);
    private String filePath;

    public FileDeletingTasklet(String filePath) {
        this.filePath = filePath;
    }

    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
        log.debug("try to delete this file : " + filePath);
        File f = new File(filePath);
        if(f.exists()){
            boolean delete = f.delete();
            if(delete){
                log.debug("File is deleted !!!!");
                return RepeatStatus.FINISHED;
            }
            else {
                log.debug("File is not deleted !!!");
                return RepeatStatus.FINISHED;
            }
        }
        return RepeatStatus.FINISHED;
    }

}

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

Еще один подход к достижению вашей цели - создать трехэтапное задание:

  1. Загрузить файл на локальный
  2. Файл процесса
  3. Удалить файл

Каждый шаг выполняет определенное действие и может помочь вам лучше управлять исключениями потока.

0 голосов
/ 05 марта 2019

Извините, я отвечаю на свой вопрос, но у меня недостаточно символов в исходном сообщении, чтобы опубликовать мои журналы:

2019-03-05 09:38:31.219  INFO 22872 --- [nio-8080-exec-2] o.s.b.c.l.support.SimpleJobLauncher      : Job: [SimpleJob: [name=job]] launched with the following parameters: [{time=1551775111110, PATH_TO_FILE=C:\tmp\tmpCorresp\ESPCORR_LITE.CSV, organisationId=152}]
2019-03-05 09:38:31.275  INFO 22872 --- [nio-8080-exec-2] o.s.batch.core.job.SimpleStepHandler     : Executing step: [step1]
2019-03-05 09:38:31.664  INFO 22872 --- [nio-8080-exec-2] c.m.b.authentification.step.Processor    : Converting (com.micropole.biomnis.authentification.model.CorrespondentEntity@35bd22f7) into (com.micropole.biomnis.authentification.model.CorrespondentEntity@5312191f)
====> TRUC
Déjà en  base de donnée
2019-03-05 09:38:31.708  INFO 22872 --- [nio-8080-exec-2] c.m.b.authentification.step.Processor    : Converting (com.micropole.biomnis.authentification.model.CorrespondentEntity@32693a30) into (com.micropole.biomnis.authentification.model.CorrespondentEntity@257865d5)
====> AD00
Déjà en  base de donnée
2019-03-05 09:38:31.757  INFO 22872 --- [nio-8080-exec-2] c.m.b.authentification.step.Processor    : Converting (com.micropole.biomnis.authentification.model.CorrespondentEntity@65e1b8c2) into (com.micropole.biomnis.authentification.model.CorrespondentEntity@1e22a6f4)
====> AD01
Déjà en  base de donnée
2019-03-05 09:38:31.773  INFO 22872 --- [nio-8080-exec-2] c.m.b.authentification.step.Processor    : Converting (com.micropole.biomnis.authentification.model.CorrespondentEntity@4f666db2) into (com.micropole.biomnis.authentification.model.CorrespondentEntity@44f877ac)
====> AD01FR01
Déjà en  base de donnée
2019-03-05 09:38:31.789  INFO 22872 --- [nio-8080-exec-2] c.m.b.authentification.step.Processor    : Converting (com.micropole.biomnis.authentification.model.CorrespondentEntity@43ab7a49) into (com.micropole.biomnis.authentification.model.CorrespondentEntity@47c8cf74)
====> AG001
Déjà en  base de donnée
2019-03-05 09:38:31.805  INFO 22872 --- [nio-8080-exec-2] c.m.b.authentification.step.Processor    : Converting (com.micropole.biomnis.authentification.model.CorrespondentEntity@485ec65b) into (com.micropole.biomnis.authentification.model.CorrespondentEntity@50bf942b)
====> AI00
Déjà en  base de donnée
2019-03-05 09:38:31.820  INFO 22872 --- [nio-8080-exec-2] c.m.b.authentification.step.Processor    : Converting (com.micropole.biomnis.authentification.model.CorrespondentEntity@54caf8ac) into (com.micropole.biomnis.authentification.model.CorrespondentEntity@6a989070)
====> AI01
Déjà en  base de donnée
2019-03-05 09:38:31.846  INFO 22872 --- [nio-8080-exec-2] c.m.b.authentification.step.Processor    : Converting (com.micropole.biomnis.authentification.model.CorrespondentEntity@56f15894) into (com.micropole.biomnis.authentification.model.CorrespondentEntity@3287ec32)
====> AI01_0102
Déjà en  base de donnée
2019-03-05 09:38:31.866  INFO 22872 --- [nio-8080-exec-2] c.m.b.authentification.step.Processor    : Converting (com.micropole.biomnis.authentification.model.CorrespondentEntity@2008f8d1) into (com.micropole.biomnis.authentification.model.CorrespondentEntity@7ce131bc)
====> AI01_0103
Déjà en  base de donnée
2019-03-05 09:38:31.916 DEBUG 22872 --- [nio-8080-exec-2] c.m.b.a.config.BatchConfig               : Stream closed
2019-03-05 09:38:31.943  INFO 22872 --- [nio-8080-exec-2] o.s.batch.core.job.SimpleStepHandler     : Executing step: [step2]
2019-03-05 09:38:31.965 DEBUG 22872 --- [nio-8080-exec-2] c.m.b.a.scheduled.TestTask               : try to delete this file : C:\tmp\tmpCorresp\ESPCORR_LITE.CSV
2019-03-05 09:38:31.966 DEBUG 22872 --- [nio-8080-exec-2] c.m.b.a.scheduled.TestTask               : File is deleted
2019-03-05 09:38:32.013  INFO 22872 --- [nio-8080-exec-2] o.s.b.c.l.support.SimpleJobLauncher      : Job: [SimpleJob: [name=job]] completed with the following parameters: [{time=1551775111110, PATH_TO_FILE=C:\tmp\tmpCorresp\ESPCORR_LITE.CSV, organisationId=152}] and the following status: [COMPLETED]
2019-03-05 09:38:32.014  INFO 22872 --- [nio-8080-exec-2] c.m.b.a.scheduled.TestTask               : FTP FILES FOR organisation1 DOWNLOADED
220-FileZilla Server version 0.9.49 beta
220-written by Tim Kosse (tim.kosse@filezilla-project.org)
220 Please visit https://filezilla-project.org/
USER micropole
331 Password required for micropole
PASS micropole
230 Logged on
SYST
215 UNIX emulated by FileZilla
PORT 172,16,31,55,217,123
200 Port command successful
LIST /organisation2/correspondants/*.csv
150 Opening data channel for directory listing of "/organisation2/correspondants/*.csv"
226 Successfully transferred "/organisation2/correspondants/*.csv"
PORT 172,16,31,55,217,124
200 Port command successful
RETR /organisation2/correspondants/ESPCORR_LITE2.CSV
150 Opening data channel for file download from server of "/organisation2/correspondants/ESPCORR_LITE2.CSV"
226 Successfully transferred "/organisation2/correspondants/ESPCORR_LITE2.CSV"
2019-03-05 09:38:32.132  INFO 22872 --- [nio-8080-exec-2] o.s.b.c.l.support.SimpleJobLauncher      : Job: [SimpleJob: [name=job]] launched with the following parameters: [{time=1551775112081, PATH_TO_FILE=C:\tmp\tmpCorresp\ESPCORR_LITE2.CSV, organisationId=153}]
2019-03-05 09:38:32.164  INFO 22872 --- [nio-8080-exec-2] o.s.batch.core.job.SimpleStepHandler     : Executing step: [step1]
2019-03-05 09:38:32.174  INFO 22872 --- [nio-8080-exec-2] c.m.b.authentification.step.Processor    : Converting (com.micropole.biomnis.authentification.model.CorrespondentEntity@17e8cdfb) into (com.micropole.biomnis.authentification.model.CorrespondentEntity@17097d5b)
====> TRUC
Déjà en  base de donnée
2019-03-05 09:38:32.185  INFO 22872 --- [nio-8080-exec-2] c.m.b.authentification.step.Processor    : Converting (com.micropole.biomnis.authentification.model.CorrespondentEntity@7fc14dfa) into (com.micropole.biomnis.authentification.model.CorrespondentEntity@64a18d83)
====> PC##INCE
Déjà en  base de donnée
2019-03-05 09:38:32.196  INFO 22872 --- [nio-8080-exec-2] c.m.b.authentification.step.Processor    : Converting (com.micropole.biomnis.authentification.model.CorrespondentEntity@42156d18) into (com.micropole.biomnis.authentification.model.CorrespondentEntity@37ce463d)
====> PCAD00
Déjà en  base de donnée
2019-03-05 09:38:32.205  INFO 22872 --- [nio-8080-exec-2] c.m.b.authentification.step.Processor    : Converting (com.micropole.biomnis.authentification.model.CorrespondentEntity@301161b0) into (com.micropole.biomnis.authentification.model.CorrespondentEntity@5905b707)
====> PCAD01
Déjà en  base de donnée
2019-03-05 09:38:32.215  INFO 22872 --- [nio-8080-exec-2] c.m.b.authentification.step.Processor    : Converting (com.micropole.biomnis.authentification.model.CorrespondentEntity@1b954b79) into (com.micropole.biomnis.authentification.model.CorrespondentEntity@2032b55a)
====> PCAD01FR01
Déjà en  base de donnée
2019-03-05 09:38:32.232  INFO 22872 --- [nio-8080-exec-2] c.m.b.authentification.step.Processor    : Converting (com.micropole.biomnis.authentification.model.CorrespondentEntity@33183058) into (com.micropole.biomnis.authentification.model.CorrespondentEntity@3b7560dc)
====> PCAG001
Déjà en  base de donnée
2019-03-05 09:38:32.250  INFO 22872 --- [nio-8080-exec-2] c.m.b.authentification.step.Processor    : Converting (com.micropole.biomnis.authentification.model.CorrespondentEntity@18345852) into (com.micropole.biomnis.authentification.model.CorrespondentEntity@153bad07)
====> PCAI00
Déjà en  base de donnée
2019-03-05 09:38:32.269  INFO 22872 --- [nio-8080-exec-2] c.m.b.authentification.step.Processor    : Converting (com.micropole.biomnis.authentification.model.CorrespondentEntity@3418d088) into (com.micropole.biomnis.authentification.model.CorrespondentEntity@6af05e2a)
====> PCAI01
Déjà en  base de donnée
2019-03-05 09:38:32.281  INFO 22872 --- [nio-8080-exec-2] c.m.b.authentification.step.Processor    : Converting (com.micropole.biomnis.authentification.model.CorrespondentEntity@315509a6) into (com.micropole.biomnis.authentification.model.CorrespondentEntity@43bb1394)
====> PCAI01_0102
Déjà en  base de donnée
2019-03-05 09:38:32.293  INFO 22872 --- [nio-8080-exec-2] c.m.b.authentification.step.Processor    : Converting (com.micropole.biomnis.authentification.model.CorrespondentEntity@ea79422) into (com.micropole.biomnis.authentification.model.CorrespondentEntity@17a6b469)
====> PCAI01_0103
Déjà en  base de donnée
2019-03-05 09:38:32.334 DEBUG 22872 --- [nio-8080-exec-2] c.m.b.a.config.BatchConfig               : Stream closed
2019-03-05 09:38:32.358  INFO 22872 --- [nio-8080-exec-2] o.s.batch.core.job.SimpleStepHandler     : Executing step: [step2]
2019-03-05 09:38:32.383 DEBUG 22872 --- [nio-8080-exec-2] c.m.b.a.scheduled.TestTask               : try to delete this file : C:\tmp\tmpCorresp\ESPCORR_LITE2.CSV
2019-03-05 09:38:32.385 ERROR 22872 --- [nio-8080-exec-2] c.m.b.a.scheduled.TestTask               : File is not :( QQ

java.nio.file.FileSystemException: C:\tmp\tmpCorresp\ESPCORR_LITE2.CSV: Le processus ne peut pas accéder au fichier car ce fichier est utilisé par un autre processus.

    at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86) ~[na:1.8.0_172]
    at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97) ~[na:1.8.0_172]
    at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102) ~[na:1.8.0_172]
    at sun.nio.fs.WindowsFileSystemProvider.implDelete(WindowsFileSystemProvider.java:269) ~[na:1.8.0_172]
    at sun.nio.fs.AbstractFileSystemProvider.delete(AbstractFileSystemProvider.java:103) ~[na:1.8.0_172]
    at java.nio.file.Files.delete(Files.java:1126) ~[na:1.8.0_172]
    at com.micropole.biomnis.authentification.step.FileDeletingTasklet.execute(FileDeletingTasklet.java:28) ~[classes/:na]
    at com.micropole.biomnis.authentification.step.FileDeletingTasklet$$FastClassBySpringCGLIB$$21e4f0e9.invoke(<generated>) [classes/:na]
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) [spring-core-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:746) [spring-aop-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) [spring-aop-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:136) [spring-aop-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:124) [spring-aop-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [spring-aop-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688) [spring-aop-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at com.micropole.biomnis.authentification.step.FileDeletingTasklet$$EnhancerBySpringCGLIB$$b769dcc5.execute(<generated>) [classes/:na]
    at org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:406) [spring-batch-core-4.0.1.RELEASE.jar:4.0.1.RELEASE]
    at org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:330) [spring-batch-core-4.0.1.RELEASE.jar:4.0.1.RELEASE]
    at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140) [spring-tx-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at org.springframework.batch.core.step.tasklet.TaskletStep$2.doInChunkContext(TaskletStep.java:272) [spring-batch-core-4.0.1.RELEASE.jar:4.0.1.RELEASE]
    at org.springframework.batch.core.scope.context.StepContextRepeatCallback.doInIteration(StepContextRepeatCallback.java:81) [spring-batch-core-4.0.1.RELEASE.jar:4.0.1.RELEASE]
    at org.springframework.batch.repeat.support.RepeatTemplate.getNextResult(RepeatTemplate.java:375) [spring-batch-infrastructure-4.0.1.RELEASE.jar:4.0.1.RELEASE]
    at org.springframework.batch.repeat.support.RepeatTemplate.executeInternal(RepeatTemplate.java:215) [spring-batch-infrastructure-4.0.1.RELEASE.jar:4.0.1.RELEASE]
    at org.springframework.batch.repeat.support.RepeatTemplate.iterate(RepeatTemplate.java:145) [spring-batch-infrastructure-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]
    at 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]
    at org.springframework.batch.core.job.AbstractJob.handleStep(AbstractJob.java:394) [spring-batch-core-4.0.1.RELEASE.jar:4.0.1.RELEASE]
    at org.springframework.batch.core.job.SimpleJob.doExecute(SimpleJob.java:135) [spring-batch-core-4.0.1.RELEASE.jar:4.0.1.RELEASE]
    at org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:308) [spring-batch-core-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]
    at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50) [spring-core-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at org.springframework.batch.core.launch.support.SimpleJobLauncher.run(SimpleJobLauncher.java:134) [spring-batch-core-4.0.1.RELEASE.jar:4.0.1.RELEASE]
    at com.micropole.biomnis.authentification.scheduled.RunFlux.startWriteDatabase(RunFlux.java:100) [classes/:na]
    at com.micropole.biomnis.authentification.scheduled.RunFlux.importCorresp(RunFlux.java:71) [classes/:na]
    at com.micropole.biomnis.authentification.scheduled.RunFlux.runCorrespFlux(RunFlux.java:51) [classes/:na]
    at com.micropole.biomnis.authentification.service.FluxServiceImpl.flux(FluxServiceImpl.java:24) [classes/:na]
    at com.micropole.biomnis.authentification.controller.WebServiceController.postStartFlux(WebServiceController.java:51) [classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_172]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_172]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_172]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_172]
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209) [spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) [spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) [spring-webmvc-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:891) [spring-webmvc-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) [spring-webmvc-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) [spring-webmvc-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991) [spring-webmvc-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925) [spring-webmvc-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974) [spring-webmvc-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:877) [spring-webmvc-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:661) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851) [spring-webmvc-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) [tomcat-embed-websocket-8.5.34.jar:8.5.34]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320) [spring-security-web-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127) [spring-security-web-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91) [spring-security-web-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) [spring-security-web-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137) [spring-security-web-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111) [spring-security-web-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170) [spring-security-web-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) [spring-security-web-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:158) [spring-security-web-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116) [spring-security-web-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:66) [spring-security-web-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) [spring-security-web-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56) [spring-security-web-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215) [spring-security-web-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178) [spring-security-web-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357) [spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270) [spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) [spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109) [spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) [spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) [spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_172]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_172]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.34.jar:8.5.34]
    at java.lang.Thread.run(Thread.java:748) [na:1.8.0_172]

2019-03-05 09:38:32.432  INFO 22872 --- [nio-8080-exec-2] o.s.b.c.l.support.SimpleJobLauncher      : Job: [SimpleJob: [name=job]] completed with the following parameters: [{time=1551775112081, PATH_TO_FILE=C:\tmp\tmpCorresp\ESPCORR_LITE2.CSV, organisationId=153}] and the following status: [COMPLETED]
2019-03-05 09:38:32.432  INFO 22872 --- [nio-8080-exec-2] c.m.b.a.scheduled.TestTask               : FTP FILES FOR organisation2 DOWNLOADED
2019-03-05 09:38:32.432  INFO 22872 --- [nio-8080-exec-2] c.m.b.a.scheduled.TestTask               : Et BIM le flux !
0 голосов
/ 04 марта 2019

Чтобы отладить это, вы можете рассмотреть возможность использования класса Files, который выдает исключение.

Обратите внимание, что класс Files определяет метод delete для выброса IOException, когда файл не может быть удален,Это полезно для создания отчетов об ошибках и для диагностики того, почему файл не может быть удален.

Обычно файлы не могут быть удалены из-за наличия дескриптора открытого файла для файла.Может быть, resourceHandler необходимо закрыть файл, чтобы удалить его?

...