【发布时间】:2019-01-29 14:06:12
【问题描述】:
我是春季批次的新手。 我的问题是如何在 spring-batch 中使用 skip 方法捕获异常? 据我所知,当春季批处理中发生一些异常时,我们可以使用跳过方法来跳过它们。 但是如何使用跳过方法获取异常消息? 有人建议我使用 SkipListener ,这个类有三个像 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();
ItemProcessorListener 如下:
//(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 count。我不确定这两个监听器是否被回调。谁能告诉我我该怎么办?或者还有什么别的吗?非常感谢。
【问题讨论】:
标签: java spring-boot spring-batch batch-processing