【问题标题】:Spring Batch error handlingSpring Batch 错误处理
【发布时间】:2021-08-23 01:27:07
【问题描述】:

我是 Spring Batch 的新手。我有一个简单的工作,包括阅读器、处理器、作家和听众。

Step 方法代码示例如下

@Bean
   public Step step1() {
       return stepBuilderFactory.get("step1")
            .<Person, Person> chunk(1)
            .reader(reader()).listener(customReadItemListener)
            .processor(processor()).listener(customProcessListener)
            .writer(writer()).listener(customWriteListener)
            taskExecutor(taskExecutor())
            .build();
}

所有与 Reader 、 Processor 和 Writer 中的逻辑相关的异常都分别通过覆盖 onReadError、onProcessError 和 onWriteError 来处理。 在这些方法中,我调用我的自定义 ExceptionService 来处理异常并将我需要的内容写入日志文件。

但是,我遇到了我还无法弄清楚的问题。在我的作家中,我正在阅读属性文件以获取输出文件名。我的错误处理测试的一部分是将文件名设置为不存在的文件并尝试处理 File Not found 异常。然而,当我运行我的测试时,我无法在我的 customWriteListener 中捕获异常。我尝试添加 StepListener、ChunkListener,但没有一个能够捕捉到异常并且它被抛出到控制台。我了解这是系统类型的错误,应由 Framework 处理。 我的问题是什么是包装它的最佳方法,就像我处理业务类型的异常一样,通过调用它并调用我的 ExceptionService?

【问题讨论】:

    标签: java spring-batch


    【解决方案1】:

    如果没有您的完整代码,我不知道到底是什么问题,但您可以检查几件事:

    1. 您是否已将侦听器声明为组件 (@Component)?
    2. 您的侦听器是否实现了 ItemWriteListener、ItemProcessListener 和 ItemReadListener?
    3. 您是否在相应的方法上声明了@OnWriteError、@OnReadError 和@OnProcessorError?

    如果您已经解决了这些问题并在主配置文件中进行了适当的配置,那么这应该可以工作。

    【讨论】:

      猜你喜欢
      • 2018-09-18
      • 2017-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多