【发布时间】:2015-11-21 12:27:57
【问题描述】:
我正在使用阅读器从春季批处理中的 db 表中读取数据。
如果表不存在,我想处理JdbcSQLException 并记录错误。我试图在阅读器中捕捉异常,但我无法捕捉到异常。我应该在哪里抓到它?
【问题讨论】:
标签: spring spring-boot spring-batch
我正在使用阅读器从春季批处理中的 db 表中读取数据。
如果表不存在,我想处理JdbcSQLException 并记录错误。我试图在阅读器中捕捉异常,但我无法捕捉到异常。我应该在哪里抓到它?
【问题讨论】:
标签: spring spring-boot spring-batch
使用JobExecutionDecider 检查表是否存在。
如果表不存在,则记录错误并移至作业结束,否则正常继续作业。
【讨论】:
您可以在您的阅读器上声明ItemReadListener:
<batch:step>
<batch:tasklet>
<batch:chunk reader="reader" writer="writer" />
<batch:listeners merge="true">
<batch:listener>
<bean class="xx.xx.xx.YourListener"/>
</batch:listener>
</batch:listeners>
</batch:tasklet>
</batch:step>
在这个监听器中,您可以使用 3 种方法:
public class YourListener<T> implements ItemReadListener<T> {
@Override
public void beforeRead() {}
@Override
public void afterRead(T item) {}
@Override
public void onReadError(Exception ex) {}
}
现在,对于您的情况,您需要检查方法 onReadError 中的异常类型:
@Override
public void onReadError(Exception ex) {
if (ex instanceof JdbcSQLException) {
// Do your thing
}
}
【讨论】: