'JobRepository failure forcing rollback Attempt to update step execution id=34 with wrong version (47), where current version is 50 Java

I want to parse a CSV file to db, and for that I am using Batch framework. But only a small part of my CSV is being saved in the db and I am getting an error saying "Attempt to update step execution id=34 with wrong version (47), where current version is 50" and I am getting it multiple times during a request. Here is my BatchConfig.

    @Configuration
@EnableBatchProcessing
@AllArgsConstructor
public class BatchConfiguration {

    private JobBuilderFactory jobBuilderFactory;

    private StepBuilderFactory stepBuilderFactory;

    private BookRepository bookRepository;

    //Step1 saving the book info in a db
    @Bean
    public FlatFileItemReader<Book> reader(){
        FlatFileItemReader<Book> itemReader = new FlatFileItemReader<>();
        itemReader.setResource(new FileSystemResource("src/main/resources/BX-Books.csv"));
        itemReader.setName("csvReader");
        itemReader.setLinesToSkip(1);
        itemReader.setLineMapper(lineMapper());
        itemReader.setStrict(false);
        return itemReader;
    }

    private LineMapper<Book> lineMapper() {
        DefaultLineMapper<Book> lineMapper = new DefaultLineMapper<>();

        DelimitedLineTokenizer lineTokenizer = new DelimitedLineTokenizer();
        lineTokenizer.setDelimiter(";");
        lineTokenizer.setStrict(false);
        lineTokenizer.setNames("ISBN","Book-Title","Book-Author","Year-Of-Publication","Publisher","Image-URL-S","Image-URL-M","Image-URL-L");

        BeanWrapperFieldSetMapper<Book> fieldSetMapper = new BeanWrapperFieldSetMapper<>();
        fieldSetMapper.setTargetType(Book.class);

        lineMapper.setLineTokenizer(lineTokenizer);
        lineMapper.setFieldSetMapper(fieldSetMapper);
        return lineMapper;
    }

    @Bean
    public BookProcessor processor(){ return new BookProcessor(); }


    //Whatever data we get here, we just apply save method from the book repository
    @Bean
    public RepositoryItemWriter<Book> writer(){

        RepositoryItemWriter<Book> writer = new RepositoryItemWriter<>();
        writer.setRepository(bookRepository);

        return writer;
    }

    @Bean
    public Step step1(){
        return stepBuilderFactory.get("csv-step").<Book, Book>chunk(100)
                .reader(reader())
                .processor(processor())
                .writer(writer())
                .taskExecutor(taskExecutor())
                .build();

    }

    @Bean
    public Job job(){
        return jobBuilderFactory.get("importBooks")
                .flow(step1())
                .end().build();
    }

    @Bean
    public ThreadPoolTaskExecutor taskExecutor(){
        ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
        threadPoolTaskExecutor.setCorePoolSize(10);
        threadPoolTaskExecutor.setMaxPoolSize(10);
        threadPoolTaskExecutor.afterPropertiesSet();
        return threadPoolTaskExecutor;
    }
}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source