抛出异常时如何访问 spring batch listener 中的每条记录?

问题描述 投票:0回答:0

你好,我正在做 spring batch 项目。

这个项目使用 JdbcCursorItemReader,有时会抛出一些 sql 异常。 现在,我真的不在乎是否会发生这种情况。但是,我想知道抛出什么异常以及什么项目有问题导致异常。

在其他帖子里看到有人建议使用Listener

我实现了以下代码

@Component
class SomeReaderListener implements ItemReadListener<SomeEntity> {
  @Override
  void before(){}

  @Override
  void afterRead(SomeEntity item) {
    log.info("SomeEntity: ${item}");
  }

  @Override
  void onReadError(Exception ex) {
    log.info("SomeEntity: ${ex.getClass}|${ex.getMessage()}");
  }
}

在日志中,它按预期记录了所有项目。 但是,如果抛出异常,我想要的只是 item 的日志。 但是我如何访问

item
中的
onReadError

我想到了下面的做法。

  1. 创建 arrayList 作为 bean
  2. 将所有项目添加到
    afterRead
  3. 中的arrayList
  4. 从arrayList中删除那些项目,除非抛出异常
    onReadError

然而,这种方法似乎效率极低。异常不会经常抛出,我有几千条记录。在 arrayList 中添加每条记录并在之后立即将其删除是没有意义的...... 另外,我相信 spring batch 提供了一种更好的方法来做我正在尝试的事情。 有人可以帮我吗?

java spring-boot jdbc spring-batch
© www.soinside.com 2019 - 2024. All rights reserved.