У меня проблемы с Spring Batch относительно конфигурации моего настраиваемого писателя, который в основном является RepositoryItemWriter
@Bean
@StepScope
public ItemReader<DTO> itemReader() {
[...]Reading from database and mapping into DTO class
return reader;
}
@Bean
@StepScope
public ItemProcessor<DTO, Entity> itemProcessor(mapper) {
return dto-> {
dto.check();
return mapper.toEntity(dto);
};
}
@Bean
@StepScope
public ItemWriter<Entity> itemWriter() {
[...]Save into database from repository
return writer;
}
@Bean
public Step step() {
return stepBuilderFactory.get("step")
.<DTO, Entity>chunk(500)
.reader(itemReader)
.writer(itemWriter)
.build();
}
Я использую mapstruct для сопоставления DTO с Entity внутри процессора. Несмотря на то, что это кажется правильным, мой писатель фактически получает элементы DTO вместо Entity и поэтому не может их сохранять.
Некоторая дополнительная, но не относящаяся к делу информация о структуре партии. Я читаю из большого файла, разбивая его на файлы меньшего размера. Затем я делю свой шаг с помощью разделителя с несколькими ресурсами, процессор выполняет несколько элементов управления форматом, затем писатель просто пакетно вставляет его в базу данных.
Изменить: я думаю, я мог бы скопировать / вставить созданный источник, но MapperImpl довольно прост:
@Override
public Entity toEntity(DTO dto) {
if ( dto == null ) {
return null;
}
Entity entity = new Entity();
[Bunch of controls and mapping]
return entity;
}
Вот и все.
Спасибо за вашу помощь