如果我只需要使用 ItemWriter 删除行,为什么我的工作步骤中需要 ItemReader
Why do I need an ItemReader in my job step if I only need to delete rows using ItemWriter
我的批处理作业中有一个步骤,我只想用它来删除 table 中的行。
步骤如下所示:
@Bean
public Step step2(StepBuilderFactory factory,
PurgeAggBalanceWriter writer,
DataSource dataSource,
PlatformTransactionManager platformTransactionManager){
return stepBuilderFactory.get("step2")
.transactionManager(platformTransactionManager)
.<Assessment,Assessment>chunk(10)
.reader(getReader(dataSource, READER_QUERY2, "AggBalanceMapper", new AggBalanceMapper()))
.writer(writer)
.build();
}
我正在使用这个作者 class 和一个 jdcb 模板来 运行 删除语句:
public class PurgeAggBalanceWriter implements ItemWriter<Assessment> {
private JdbcTemplate jdbcTemplate;
private static final String DELETE_QUERY = "DELETE FROM TABLE WHERE COLUMN = 'TEST'";
public PurgeAggBalanceWriter(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
@Override
public void write(List<? extends Assessment> list) {
jdbcTemplate.update(DELETE_QUERY);
}
步骤成功完成,但我不明白为什么需要 ItemReader,因为它在我尝试从步骤 2 中删除 .reader() 时指出。
有没有办法避免使用 reader/mapper 而只使用编写器,因为我所要做的只是 运行 删除查询?
all I have to do is run a delete query
在这种情况下,您不需要 chunk-oriented tasklet。一个简单的 tasklet 就足够了,比如:
public class DeletionTasklet implements Tasklet {
private static final String DELETE_QUERY = "DELETE FROM TABLE WHERE COLUMN = 'TEST'";
private JdbcTemplate jdbcTemplate;
public DeletionTasklet(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) {
jdbcTemplate.update(DELETE_QUERY);
return RepeatStatus.FINISHED;
}
}
我的批处理作业中有一个步骤,我只想用它来删除 table 中的行。
步骤如下所示:
@Bean
public Step step2(StepBuilderFactory factory,
PurgeAggBalanceWriter writer,
DataSource dataSource,
PlatformTransactionManager platformTransactionManager){
return stepBuilderFactory.get("step2")
.transactionManager(platformTransactionManager)
.<Assessment,Assessment>chunk(10)
.reader(getReader(dataSource, READER_QUERY2, "AggBalanceMapper", new AggBalanceMapper()))
.writer(writer)
.build();
}
我正在使用这个作者 class 和一个 jdcb 模板来 运行 删除语句:
public class PurgeAggBalanceWriter implements ItemWriter<Assessment> {
private JdbcTemplate jdbcTemplate;
private static final String DELETE_QUERY = "DELETE FROM TABLE WHERE COLUMN = 'TEST'";
public PurgeAggBalanceWriter(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
@Override
public void write(List<? extends Assessment> list) {
jdbcTemplate.update(DELETE_QUERY);
}
步骤成功完成,但我不明白为什么需要 ItemReader,因为它在我尝试从步骤 2 中删除 .reader() 时指出。
有没有办法避免使用 reader/mapper 而只使用编写器,因为我所要做的只是 运行 删除查询?
all I have to do is run a delete query
在这种情况下,您不需要 chunk-oriented tasklet。一个简单的 tasklet 就足够了,比如:
public class DeletionTasklet implements Tasklet {
private static final String DELETE_QUERY = "DELETE FROM TABLE WHERE COLUMN = 'TEST'";
private JdbcTemplate jdbcTemplate;
public DeletionTasklet(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) {
jdbcTemplate.update(DELETE_QUERY);
return RepeatStatus.FINISHED;
}
}