Spring batch 当I";fib";读者,我必须使用微线程吗?

Spring batch 当I";fib";读者,我必须使用微线程吗?,spring-batch,spring-mybatis,Spring Batch,Spring Mybatis,我知道所有spring步骤都需要一个读卡器、一个写卡器和一个可选的处理器。所以,即使我的脚步只需要一个作家,我也在欺骗一个只会让春天快乐的读者 这是基于找到的解决方案。是过时了,还是我遗漏了什么 我有一个spring批处理作业,它有两个分块的步骤。我的第一步,deleteCount,就是从表中删除所有行,以便第二步有一个干净的记录。这意味着我的第一步不需要读卡器,因此我遵循上面链接的stackoverflow解决方案,创建了一个NoOpItemReader,并将其添加到我的stepbuilder

我知道所有spring步骤都需要一个读卡器、一个写卡器和一个可选的处理器。所以,即使我的脚步只需要一个作家,我也在欺骗一个只会让春天快乐的读者

这是基于找到的解决方案。是过时了,还是我遗漏了什么

我有一个spring批处理作业,它有两个分块的步骤。我的第一步,
deleteCount
,就是从表中删除所有行,以便第二步有一个干净的记录。这意味着我的第一步不需要读卡器,因此我遵循上面链接的stackoverflow解决方案,创建了一个
NoOpItemReader
,并将其添加到我的
stepbuilder
对象(底部的代码)

我的编写器被映射到一个简单的SQL语句,该语句删除表中的所有行(代码在底部)

deleteCounts
步骤未清除我的表格。我怀疑这是因为我在骗读者

我希望
deleteCounts
将删除表中的所有行,但事实并非如此——我怀疑这是因为我的“fibbed”阅读器,但不确定我做错了什么

我的删除声明:

<delete id="delete">
    DELETE FROM ${schemaname}.DERP
</delete>

从${schemaname}.DERP中删除
我的删除计数步骤:

@Bean
@JobScope
public Step deleteCounts() {
    StepBuilder sb = stepBuilderFactory.get("deleteCounts");
    SimpleStepBuilder<ProcessedCountData, ProcessedCountData> ssb = sb.<ProcessedCountData, ProcessedCountData>chunk(10);
    ssb.reader(noOpItemReader());
    ssb.writer(writerFactory.myBatisBatchWriter(COUNT_DATA_DELETE));
    ssb.startLimit(1);
    ssb.allowStartIfComplete(true);
    return ssb.build();
}
@Bean
@工作范围
公共步骤deleteCounts(){
stepbuildersb=stepBuilderFactory.get(“deleteCounts”);
simplestbuilder ssb=sb.chunk(10);
ssb.reader(noOpItemReader());
ssb.writer(writerFactory.myBatisBatchWriter(计数数据删除));
ssb.STARTIMIT(1);
ssb.AllowsTransfect完成(真);
返回ssb.build();
}
My NoOpItemReader,基于先前链接的stackoverflow解决方案:

public NoOpItemReader<? extends ProcessedCountData> noOpItemReader() {
    return new NoOpItemReader<>();
}

// for steps that do not need to read anything
public class NoOpItemReader<T> implements ItemReader<T> {

    @Override
    public T read() throws Exception {
        return null;
    }
}

publicNoopItemReader您的
NoOpItemReader
返回
null
。返回
null
ItemReader
表示输入已用尽。因为在您的情况下,它只返回这些内容,所以框架首先假定没有输入。

your
NoOpItemReader
返回
null
。返回
null
ItemReader
表示输入已用尽。因为,在您的情况下,这就是它返回的所有内容,所以框架首先假定没有输入。

如果您只需要一个编写器,为什么不使用
小任务
?@MichaelMinella在编写完这段代码后,我意识到我可以使用
小任务
。然而,我想知道为什么这不能提高我对SpringBatch的理解。基于之前的堆栈溢出回答,我认为使用
noopitemreader
会有效……如果您只需要一个编写器,为什么不使用
Tasklet
?@MichaelMinella在编写完这段代码后,我意识到我可以使用
Tasklet
。然而,我想知道为什么这不能提高我对SpringBatch的理解。根据前面的堆栈溢出答案,我认为使用
noopitemreader
可以工作……我明白了。我错误地认为我在问题中链接的堆栈溢出解决方案将扩展到读者和作者的工作。这是一个错误的假设,是吗?我明白了。我错误地认为我在问题中链接的堆栈溢出解决方案将扩展到读者和作者的工作。这是一个错误的假设,是吗?