'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 |
|---|
