PurgeVerresBatchConfiguration.java
package com.sintia.ffl.admin.optique.catalogue.batch.config.purgeglasses;
import com.sintia.ffl.admin.optique.catalogue.batch.config.ChunkCountListener;
import com.sintia.ffl.admin.optique.catalogue.batch.reader.purgeglasses.PurgeGlassesItemReader;
import com.sintia.ffl.admin.optique.catalogue.batch.tasklet.purgeglasses.PurgeGlassesDataBackup;
import com.sintia.ffl.admin.optique.catalogue.batch.writer.purgeglasses.PurgeGlassesItemWriter;
import com.sintia.ffl.admin.optique.services.dto.Glasses;
import lombok.RequiredArgsConstructor;
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.batch.item.support.PassThroughItemProcessor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * Configure the bean to launch the purge of the modeleVerre entries job
 *
 * @author hlouanzi
 */
@Configuration
@EnableBatchProcessing
@RequiredArgsConstructor
public class PurgeVerresBatchConfiguration {
	public final JobBuilderFactory jobBuilderFactory;
	public final StepBuilderFactory stepBuilderFactory;
	public final ChunkCountListener chunkCountListener;
	private final PurgeGlassesItemReader purgeGlassesItemReader;
	private final PurgeGlassesItemWriter purgeGlassesItemWriter;
	private final PurgeGlassesDataBackup purgeGlassesDataBackup;
	@Bean
	public Job purgeVerresJob(PurgeVerresJobCompletionNotificationListener listener) {
		FlowBuilder<Flow> flowBuilder = new FlowBuilder<>("purgeVerres");
		Flow flow = flowBuilder
			.start(backupDatabase())
			.next(purgeStep())
			.build();
		return jobBuilderFactory.get("purgeVerresJob")
			.incrementer(new RunIdIncrementer())
			.listener(listener)
			.start(flow)
			.end()
			.build();
	}
	/**
	 * @return
	 */
	@Bean
	public Step backupDatabase() {
		return stepBuilderFactory.get("backup database")
			.tasklet(purgeGlassesDataBackup)
			.build();
	}
	@Bean
	public Step purgeStep() {
		return stepBuilderFactory.get("purgeStep")
			.<Glasses, Glasses> chunk(1000)
			.reader(purgeGlassesItemReader)
			.processor(new PassThroughItemProcessor<>())
			.writer(purgeGlassesItemWriter)
			.listener(chunkCountListener)
			.build();
	}
}