我有麻烦与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;
}
差不多就是这样。
谢谢你的帮助
我猜是因为晚上的编码错误。没有为该步骤声明处理器,因此项直接从读卡器传递到写卡器,而没有作为实体进行处理和转换。
@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)
.processor(itemProcessor) //Edit with solution : This line was missing
.writer(itemWriter)
.build();
}
不过,我仍然想知道它是否应该被编译。
返回mapper.to实体(dto);
也许,问题出在mapper实现上。如果没有实现源,很难说mapper是如何工作的
在我的Spring boot和Spring batch应用程序中,我有这样一个步骤: 我的作家是一个空的,如下所示: 现在,在我的处理器中,我有: 问题:由于所有对象都传递给处理器,我可以在处理器本身中处理它们,而不是使用任何转换等,因为我的目的通过使用处理器来解决,这是一个好的做法吗?或者我必须使用作家/自定义作家来完成工作?
(A)ItemReader[第一输入]->(A)ItemProcessor[第一输入]->(B)ItemReader[使用处理过的输入从另一个源收集第二输入]->(B)ItemProcessor[使用处理过的第一输入和第二输入]->{repeat B}->ItemWriter(最终结果) 有没有人知道如何在Spring批处理中这样做?多谢了。
关于skip,我有一个非常基本的问题。我正在使用spring示例提供的spring batch simple cli项目,并试图理解跳过行为。它有一个非常基本的示例读取器,可以读取字符串数组(我将其修改为从Hellowworld 1到Hellowworld 10的10个字符串列表中读取),还有一个基本的编写器,可以登录到控制台。writer抛出java。每写一次都有例外。我在作业配置中增加了4个跳
我开始学习spring batch,遇到一个问题,当我想使用在数据库中持久化作业的状态时。编译器显示: “原因:org.springframework.beans.factory.beanCreationException:创建类路径资源[springconfig.xml]中定义的名为'job repository'的bean时出错:调用init方法失败;嵌套异常为java.lang.noClas
我目前正在编写一个Spring批处理,其中我正在读取一个数据块,并对其进行处理,然后我希望将此数据传递给两个Writer。一个writer将简单地更新数据库,而第二个writer将写入csv文件。 我计划编写自己的自定义编写器,并在customItemWriter中注入这两个ItemWriter,并在customItemWriter的write方法中调用这两个ItemWrite的write方法。这