我是spring批的新手。
我的问题是如何使用 spring-batch 中的skip方法捕获异常?
据我所知,当Spring Batch中发生一些异常时,我们可以使用skip方法来跳过它们。
但是如何使用skip方法获取异常消息呢?
有人建议我使用跳过监听器,这个类有三个回调方法onSkipInProcess(),但这对我来说没有用。
并且 ItemProcessListener 也不起作用。
代码如下:(我使用skip方法来忽略异常,并使用两个侦听器来接收异常信息)
Step mainStep = stepBuilder.get("run")
.<ItemProcessing, ItemProcessing>chunk(5)
.faultTolerant()
.skip(IOException.class).skip(SocketTimeoutException.class)//skip IOException here
.skipLimit(2000)
.reader(reader)
.processor(processor)
.writer(writer)
.listener(stepExecListener)
.listener(new ItemProcessorListener()) //add process listener
.listener(new SkipExceptionListener()) //add skip exception listner
.build();
ItemProcessor 侦听器如下所示:
//(this class implements ItemProcessListener )
{
@Override
public void beforeProcess(Object item) {
// TODO Auto-generated method stub
}
@Override
public void afterProcess(Object item, Object result) {
logger.info("invoke remote finished, item={},result={}",item,result);
}
@Override
public void onProcessError(Object item, Exception e) {
logger.error("invoke remote error, item={},exception={},{}",item,e.getMessage(),e);
}
}
SkipExceptionListener 如下所示:
//(implements SkipListener<Object, Object>)
{
@Override
public void onSkipInRead(Throwable t) {
// TODO Auto-generated method stub
}
@Override
public void onSkipInWrite(Object item, Throwable t) {
// TODO Auto-generated method stub
}
@Override
public void onSkipInProcess(Object item, Throwable t) {
logger.info("invoke remote finished,item={},itemJsonStr={},errMsg={},e={}",
item,
JSONObject.toJSONString(item),
t.getMessage(),
t);
}
}
问题是所有记录器都不起作用。实际上skip方法确实工作得很好,我可以在表batch_step_execution中获取skip计数。我不确定这两个监听器是否被回调。谁能告诉我我该怎么办?或者还有其他什么吗?多谢。