【问题标题】:pointing a skipped item and the error field in a chunk in spring batch在春季批处理中指向一个跳过的项目和错误字段
【发布时间】:2012-02-21 13:08:35
【问题描述】:

场景 1

跳过监听界面如下:

public interface SkipListener<T,S> extends StepListener {
 void onSkipInRead(Throwable t);
 void onSkipInProcess(T item, Throwable t);
 void onSkipInWrite(S item, Throwable t);
}

这个接口最好用来记录跳过的项目和错误。

是否可以获取输入中跳过的项目的编号。例如如果输入中的第 10 项被跳过,我应该能够记录“第 10 项被跳过!”通过上面的监听器。

我需要这个,因为我将输入作为文件,其中行没有任何识别键。因此,仅通过注销项目,无法在文件中精确定位项目本身。

如果输入是数据库表而不是文件怎么办?是否也可以在那里获得跳过项目的位置编号?

场景 2

我的 bean 具有三个属性 1、2 和 3(所有字符串),其中通过适当的行映射器从文件中读取输入,然后在经过一些处理后将数据加载到数据库表中。

以下是来自处理器的代码块:

if(two.charAt(4) == '_')
   { // do some processing }

很明显,如果上面块文件中的字段二为空,则会抛出“字符串索引超出范围异常”并被跳过。

因此,在跳过侦听器中,我想要的是有关引发错误的列的信息。

由于名为 2 的字段出现错误,我想登录跳过侦听器的信息类似于“第 10 行的属性一抛出错误”字符串索引超出范围异常“或者如果可能,甚至更具体”第 10 行的属性 1 为空”,这对于不懂 Java 行话的企业来说更有意义。

希望我能澄清我的疑虑。

感谢阅读!

【问题讨论】:

  • “有没有可能”的问题有点模糊——通常的答案是肯定的,你能再具体一点吗?
  • @MichaelLange:请再次查看问题。我试图解释这些疑问。谢谢!

标签: spring-batch


【解决方案1】:

场景 1

要通过读取文件获取跳过项目的行号,您可以:

  • 对于 onSkipInRead - 实现自己/包装阅读器以处理异常
  • onSkipInProcess - 实现自己的 linemapper,将行号写入项目或在步骤上下文中写入当前行号
  • onsKipInWrite - 与 onSkipInProcess 相同

要通过读取表格获取跳过项目的行号,您可以:

  • for onSkipInRead - 实现自己/包装阅读器以处理异常,但我不确定是否可以在此处获取行号,可能只是当前的块开始号
  • onSkipInProcess - 实现自己的行映射器,将行号写入项目或在步骤上下文中写入当前行号
  • onsKipInWrite - 与 onSkipInProcess 相同

场景 2

请参见场景 1 并在处理器中添加一个 try/catch 块,以便您抛出自己的异常,例如带有属性位置的信息,或以类似的方式更改步骤上下文

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    • 2017-10-06
    • 2016-04-07
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    相关资源
    最近更新 更多