首页 > 解决方案 > Spring Batch Writer 接收到错误的对象类型

问题描述

我在使用 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 映射到处理器内的实体。尽管看起来是对的,但我的作者实际上接收的是 DTO 项目而不是实体,因此无法持久保存它们。

关于批次结构的一些补充但不相关的信息。我正在从一个大文件中读取,并将其拆分为较小的文件。然后我使用多资源分区器对我的步骤进行分区,处理器正在执行一些格式控制,然后编写器将其批量插入数据库。

编辑:我想我可以复制/粘贴生成的源,但 MapperImpl 非常简单:

   @Override
    public Entity toEntity(DTO dto) {
        if ( dto == null ) {
            return null;
        }
      Entity entity = new Entity();
      [Bunch of controls and mapping]
      return entity;
     }

差不多就是这样。

谢谢您的帮助

标签: javaspringspring-batch

解决方案


返回 mapper.toEntity(dto);

也许,问题在于映射器的实现。很难说没有实现源的映射器是如何工作的


推荐阅读