Reputation: 318
I need to add a Spring Batch Job in my Spring Boot application, i need to downloads a list of file from a FTP and process them. They are CSV files.
I have created a Job with only one Step (i will come back later on this point).
In my step i have a Reader (FlatFileItemReader), a processor (that transform my entity) and an itemWriter that write the data in my Database.
I want to delete the file that i have downloaded after it's processing.
To dot that, i have tryied to add a second step that juste delete the file after the processsing. With that step2, some times my file is not deleted. It's like my ItemReader is not closing the inputStream so i keep an handler on it.
I have tried an other solution, use a custom FlatItemReader, i have override the close() method, to delete the file after is closed. A weird thing happen with this solution, my close method is called twice and some times i can delete the file and some times i can't delete it...
See the logs below :
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 !
the code of my close method :
@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");
}
}
}
I really thankfull if someone can help me.
Thanks !!!
Sincerely.
Nicolas Sagon.
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;
}
}
Upvotes: 1
Views: 4371
Reputation: 318
I'm sorry i answer my own question, but i don't have enough characters on my original message to post my logs :
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 ([email protected])
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 !
Upvotes: 0
Reputation: 18383
Another approch to achieve your goal is to create a 3 steps job:
Every step do a specific action and may help you to manage flow exceptions in a better way.
Upvotes: 1
Reputation: 304
In order to debug this you might consider using the Files
class which throws an exception.
Note that the Files class defines the delete method to throw an IOException when a file cannot be deleted. This is useful for error reporting and to diagnose why a file cannot be deleted.
Normally files cannot be deleted because there is an open file handle to the file. Could it be that the resourceHandler
needs to close the file in order for it to be deleted?
Upvotes: 0