当前位置: 首页 > 知识库问答 >
问题:

从ItemWriter的boot Spring批处理应用程序@beforstep方法调用ItemProcessor的@beforstep方法之前

荆学民
2023-03-14

我正在学习SpringBatch,我在启动Spring时在ItemProcessor之前调用ItemWriter时遇到了一个问题。为什么?

public class PollingReader implements ItemReader<File> {
    @BeforeStep
    public void beforeStep(StepExecution stepExecution) throws NotDirectoryException {..}
    @AfterStep
    public ExitStatus afterStep(StepExecution stepExecution) {..}
}
    
public class PollingWriter implements ItemWriter<File> {
    @BeforeStep
    public void beforeStep(StepExecution stepExecution) {..}
    @AfterStep
    public ExitStatus afterStep(StepExecution stepExecution) {..}
..
}

public class PollingProcessor implements ItemProcessor<File, File> {
    @BeforeStep
    public void beforeStep(StepExecution stepExecution) {..}
    @AfterStep
    public ExitStatus afterStep(StepExecution stepExecution) {..}
}

并且@AfterstepItem处理机的方法在@AfterstepItemWriter方法之前被调用。

我期待@Beforestep的这个循环:

  • ItemReader
  • 项目处理器
  • ItemWriter

但我有这样的结果:

  • ItemReader

对于@AfterStep,我期望:

  • ItemWriter

但我有这样的结果:

  • 项目处理器
  • ItemWriter
  • ItemReader

谢谢:)

共有1个答案

马俊
2023-03-14

您的对象是多态的:它们既是项目读取器/处理器/写入器又是StepExectionListeners(更准确地说,是作为代理)。当Spring Batch在步骤之前/之后运行StepExectionListeners时,它不会将它们视为读取器/处理器/写入器,并且它们的执行顺序不一定与在面向块的步骤中调用它们的顺序相同(事实上,在这种情况下,顺序是未定义的)。

 类似资料:
  • 我有以下控制器类 } 对于异常处理,我使用Spring3。2.建议如下: } 我将XML bean定义为 控制器通知处理程序不处理从控制器引发的异常。我在谷歌上搜索了几个小时,但找不到它发生的原因。我照着描述的做了http://www.baeldung.com/2013/01/31/exception-handling-for-rest-with-spring-3-2/在这里 如果有人知道,请告诉

  • 我正在为Spring MVC中的异常处理开发示例演示应用程序。我正在尝试使用@ControllerAdvice处理异常 我遵循了本链接中描述的步骤。 但是当我运行我的应用程序时,我得到了以下错误 以下是我正在学习的课程 应用程序异常。JAVA 控制器类 ApplicationExceptionController。JAVA 下面是GlobalExceptionHandler类 GlobalExce

  • 但是当我连接DB2数据库批处理时,它给我的错误如下。 添加属性(Spring.batch.schema=classpath:/org/springframework/batch/core/schema-db2.sql)后,由frenzykryger提及,得到以下异常。 添加属性(Spring.Batch.Initializer.Enabled=False)后,获得以下异常。

  • 我有以下问题: 我有一个如下的方法,一次只能收集500个名字: 我有一个1000个名字的列表,因此我想使用番石榴将这个列表划分为最大大小为500的子列表 并将其传递给请求以获取结果DTO列表。如何在 Java8 中执行此操作?

  • 我是spring批处理的新手,所以也许我错了,但我不明白为什么itemWriter中的write方法需要数据列表: 如果我理解这个过程,首先是itemReader,它读取项目列表。在第一次迭代中,读取第一项,依此类推...下一步是itemProcessor,它从ItemReader获取数据。然后有一些处理和itemProcessor返回新的类,我们希望保存在某个地方。最后一步是itemWriter

  • 我能用一个ItemReader和多个子步骤编写一个Spring批处理步骤吗?每个步骤后面都有一个ItemProcessor和一个ItemWriter? 我正在努力实现这样的目标: 补充说明 为了避免前后矛盾,我宁愿不读两遍 我认为这个问题与Spring Batch不同:一个阅读器、多个处理器和编写器,因为我需要按顺序处理项目,而不是并行处理。