java - 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;
}
差不多就是这样。
谢谢您的帮助
解决方案
返回 mapper.toEntity(dto);
也许,问题在于映射器的实现。很难说没有实现源的映射器是如何工作的
推荐阅读
- jquery - jQuery Twitter hack 在 TamperMonkey 中失败,但在控制台中失败
- sql - 需要修改哪个语句?
- php - 图片从数据库到推文卡中的链接 (PHP)
- java - 是否需要堆来存储常量(Java 对象)?多少钱?
- r - pheatmap() 条件分组中的故障以及其他混淆点
- typescript - 从枚举参数推断 Typescript 函数返回类型
- jenkins - Jenkins 中的构建管道和交付管道有什么区别?
- c++ - 如何在 CMakeList.txt 中禁用生成 protobuf 的 clang 警告
- python - AttributeError:模块 'tensorflow.data' 没有属性 'experimental'
- linux - PhpStorm 每次启动时都需要创建/打开项目