如何删除刚才保留的实体?
@Bean
public Job job() {
return this.jobBuilderFactory.get("job")
.start(this.syncStep())
.build();
}
@Bean
public Step syncStep() {
// read
RepositoryItemReader<Element1> reader = new RepositoryItemReader<>();
reader.setRepository(repository);
reader.setMethodName("findElements");
reader.setArguments(new ArrayList<>(Arrays.asList(ZonedDateTime.now())));
final HashMap<String, Sort.Direction> sorts = new HashMap<>();
sorts.put("uid", Sort.Direction.ASC);
reader.setSort(sorts);
// write
RepositoryItemWriter<Element1> writer = new RepositoryItemWriter<>();
writer.setRepository(otherrepository);
writer.setMethodName("save");
return stepBuilderFactory.get("syncStep")
.<Element1, Element2> chunk(10)
.reader(reader)
.processor(processor)
.writer(writer)
.build();
}
这是一个转储元素的过程。我们将元素从一个表传递到另一个表。
2条答案
按热度按时间n3ipq98p1#
这是一个转储元素的过程。我们将元素从一个表传递到另一个表。
您可以分两个步骤来完成。第一个步骤是将项目从一个数据表复制到另一个数据表。第二个步骤是从来源数据表删除项目。只有在第一个步骤成功时,才应该执行第二个步骤。
afdcj2ne2#
有几个选项:
使用
CompositeItemWriter
您可以创建另一个执行删除逻辑的
ItemWriter
,例如:要执行这两个写入器,可以使用
CompositeItemWriter
:然而,如果你的
ItemProcessor
将原始实体转换成全新的实体,这就不起作用了。使用单独的
Step
或者,您可以将新编写器放在完全独立的
Step
中:现在,您可以分别计划这两个步骤:
使用
Tasklet
如果使用单独的步骤,并且根据数据量的不同,将数据完全卸载到数据库并执行单个
delete ... where ...
查询可能会更有趣。然后,可以通过在配置中声明一个新的
Step
,以与前面相同的方式注册此Tasklet
: