How to combine Spring batch merge query and compositeItemWriter?
add a comment
To combine Spring Batch merge query and CompositeItemWriter, you can follow these steps:
@Bean
public CompositeItemWriter<MyEntity> compositeItemWriter() {
List<ItemWriter<MyEntity>> writers = new ArrayList<>();
writers.add(itemWriter1());
writers.add(itemWriter2());
CompositeItemWriter<MyEntity> compositeItemWriter = new CompositeItemWriter<>();
compositeItemWriter.setDelegates(writers);
return compositeItemWriter;
}
public class MergeItemWriter implements ItemWriter<List<MyEntity>> {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public void write(List<? extends List<MyEntity>> items) throws Exception {
for (List<MyEntity> myEntities : items) {
for (MyEntity myEntity : myEntities) {
jdbcTemplate.update("<merge_query>", myEntity.getId(), myEntity.getName());
}
}
}
}
@Bean
public CompositeItemWriter<MyEntity> compositeItemWriter() {
List<ItemWriter<MyEntity>> writers = new ArrayList<>();
writers.add(itemWriter1());
writers.add(itemWriter2());
writers.add(new MergeItemWriter());
CompositeItemWriter<MyEntity> compositeItemWriter = new CompositeItemWriter<>();
compositeItemWriter.setDelegates(writers);
return compositeItemWriter;
}
@Bean
public Step step() {
return stepBuilderFactory.get("step")
.<MyEntity, MyEntity>chunk(10)
.reader(reader())
.processor(processor())
.writer(compositeItemWriter())
.build();
}
In this way, you can use the CompositeItemWriter to write data to multiple tables and execute the merge query using a custom ItemWriter.
Please start posting anonymously - your entry will be published after you log in or create a new account. This space is reserved only for answers. If you would like to engage in a discussion, please instead post a comment under the question or an answer that you would like to discuss
Asked: 2022-03-25 11:00:00 +0000
Seen: 1 times
Last updated: Aug 24 '21