PeremptionVerresAbsentsBatchConfiguration.java
package com.sintia.ffl.admin.optique.catalogue.batch.config.expiremissingglasses;
import com.sintia.ffl.admin.optique.catalogue.batch.config.ChunkCountListener;
import com.sintia.ffl.admin.optique.catalogue.batch.processor.expiremissingglasses.PeremptionVerresAbsentsItemProcessor;
import com.sintia.ffl.admin.optique.catalogue.batch.reader.expiremissingglasses.PeremptionVerresAbsentsItemReader;
import com.sintia.ffl.admin.optique.catalogue.batch.tasklet.expiremissingglasses.ExpirationMissingGlassesArchiveFile;
import com.sintia.ffl.admin.optique.catalogue.batch.tasklet.expiremissingglasses.ExpirationMissingGlassesCleanLocalDirectory;
import com.sintia.ffl.admin.optique.catalogue.batch.writer.ExpireMissingGlassesRealItemWriter;
import com.sintia.ffl.admin.optique.catalogue.batch.writer.PeremptionVerresAbsentsItemWriter;
import com.sintia.ffl.admin.optique.catalogue.models.GlassesCSV;
import com.sintia.ffl.admin.optique.services.dto.Glasses;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.job.builder.FlowBuilder;
import org.springframework.batch.core.job.flow.Flow;
import org.springframework.batch.core.launch.support.RunIdIncrementer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Configure the bean to launch the peremption of the modeleVerre "Absents" entries job
*
* @author hlouanzi
*/
@Configuration
@EnableBatchProcessing
public class PeremptionVerresAbsentsBatchConfiguration {
// the factories for the jobBuilderFactory
@Autowired
public JobBuilderFactory jobBuilderFactory;
// the factories for the stepBuilderFactory
@Autowired
public StepBuilderFactory stepBuilderFactory;
@Autowired
public PeremptionVerresAbsentsDecider peremptionVerresAbsentsDecider;
@Autowired
public PeremptionVerresAbsentsItemReader peremptionVerresAbsentsReader;
@Autowired
public PeremptionVerresAbsentsItemProcessor peremptionVerresAbsentsProcessor;
@Autowired
public PeremptionVerresAbsentsItemWriter peremptionVerresAbsentsItemWriter;
@Autowired
public ExpireMissingGlassesRealItemWriter expireMissingGlassesRealItemWriter;
@Autowired
public ExpirationMissingGlassesCleanLocalDirectory expirationMissingGlassesCleanLocalDirectory;
@Autowired
public ExpirationMissingGlassesArchiveFile expirationMissingGlassesArchiveFile;
@Autowired
public ChunkCountListener chunkCountListener;
@Bean
public Job peremptionVerresAbsentsJob(PeremptionVerresAbsentsJobCompletionNotificationListener listener) {
FlowBuilder<Flow> flowBuilder = new FlowBuilder<>("peremptionVerresAbsentsJob");
Flow flow = flowBuilder
.start(peremptionVerresAbsentsDecider).on("EXECUTION").to(realisationStep())
.from(peremptionVerresAbsentsDecider).on("SIMULATION").to(simulationFlow())
.build();
return jobBuilderFactory.get("peremptionVerresAbsentsJob")
.incrementer(new RunIdIncrementer())
.listener(listener)
.start(flow)
.end()
.build();
}
@Bean
public Step realisationStep() {
return stepBuilderFactory.get("realisationStep")
.<Glasses, GlassesCSV> chunk(1000)
.reader(peremptionVerresAbsentsReader)
.processor(peremptionVerresAbsentsProcessor)
.writer(expireMissingGlassesRealItemWriter)
.listener(chunkCountListener)
.build();
}
public Flow simulationFlow() {
FlowBuilder<Flow> flowBuilder = new FlowBuilder<>("simulationjob");
return flowBuilder
.start(simulationStep())
.next(archiveResultExpireMissingFile())
.build();
}
@Bean
public Step simulationStep() {
return stepBuilderFactory.get("simulationStep")
.<Glasses, GlassesCSV> chunk(1000)
.reader(peremptionVerresAbsentsReader)
.processor(peremptionVerresAbsentsProcessor)
.writer(peremptionVerresAbsentsItemWriter)
.listener(chunkCountListener)
.build();
}
/**
* Empty all the local directories used by this job (ie output, and archived output)
*
* @return
*/
@Bean
public Step cleanExpirationMissingGlassesLocalDirectory() {
return stepBuilderFactory.get("cleanExpirationMissingGlassesLocalDirectory")
.tasklet(expirationMissingGlassesCleanLocalDirectory)
.build();
}
/**
* Archive the result file generated in the job
*
* @return
*/
@Bean
public Step archiveResultExpireMissingFile() {
return stepBuilderFactory.get("archiveResultExpireMissingFile")
.tasklet(expirationMissingGlassesArchiveFile)
.build();
}
}