Spring Batch文件处理错误,我的ItemReader未关闭

时间:2019-03-04 13:11:26

标签: java spring-boot java-ee spring-batch file-processing

我需要在Spring Boot应用程序中添加一个Spring Batch Job,我需要从FTP下载文件列表并进行处理。它们是CSV文件。

我只创建了一个步骤,就创建了一个Job(稍后我会回来)。

在我的步骤中,我有一个读取器(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 !

我的close方法的代码:

@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");
                }
            }
        }

如果有人可以帮助我,我真的很感激。

谢谢!!!

此致。

Nicolas Sagon。

编辑:

我的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 :(得分:1)

达成目标的另一种方法是创建一个三步作业:

  1. 下载文件到本地
  2. 处理文件
  3. 删除文件

每个步骤都会执行特定的操作,并且可以帮助您更好地管理流异常。

答案 1 :(得分:0)

为了进行调试,您可以考虑使用引发异常的Files类。

  

请注意,Files类定义了delete方法,当无法删除文件时,引发IOException。这对于错误报告和诊断为什么无法删除文件很有用。

通常无法删除文件,因为该文件有一个打开的文件句柄。可能resourceHandler需要关闭文件才能删除该文件吗?

答案 2 :(得分:0)

对不起,我回答了我自己的问题,但是我的原始消息中没有足够的字符来张贴日志:

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 !