gpt4 book ai didi

java - 如何识别 ItemWriter 中的异常(由 ItemReader、readItem 方法发生)

转载 作者:行者123 更新时间:2023-11-30 01:58:34 25 4
gpt4 key购买 nike

在 JSR352 批处理中,我正在运行分区步骤来创建多个 JSON 对象。每个线程从 oracle 读取一些数据并写入 JSON 对象。在某些情况下,resultSet.next() 超时并引发异常,并转到 ItemReader 和 ItemWriter 类的 close() 方法来清理所有资源。这完全没问题。不过,我对 writer 的 close() 方法进行了一些 dao 调用。当作者完成时需要执行。但是当 ItemReader 出现异常时,我不确定如何获取 close() 方法的异常详细信息。如果 ItemReader 上发生异常,close() 方法不应执行 DAO 调用。是否有办法识别 ItemWriter 类中的 ItemReader 异常。

@Override
public Object readItem() throws Exception {
Map<String, Object> resultMap = new HashMap<>();
if (firstObject && null != resultSet && resultSet.isBeforeFirst()) {
firstObject = false;
return columnMetaDataMap;
}
else if (null != resultSet && resultSet.next()) {
recordNumber++;
for (int i = 1; i <= rsMetaData.getColumnCount(); i++) {
resultMap.put("C" + i, resultSet.getObject(i));
}
return resultMap;
}
return null;

ItemWriter 类 close():

 @Override
public void close() throws Exception {
gsonWriter.endArray();
gsonWriter.flush();
gsonWriter.close();
subjectAreaCode = categoryCode+"/"+subCategoryCode+"/";
logger.info("***Exception catch from writer for the file:"+outFile+"\n"+stepcontext.getException());

if (file.length() == 2) {
file.delete();
gahRptExecStatUpdDAO.updateBatchRptStatus(outFile, GAHRptStatusConstants.NO_ROWS_TO_PROC);
}

最佳答案

如果您定义了 ItemReadListener,它将在 onReadError 方法中获得控制权,因此您会知道 ItemReader 中出现了异常。然后,您可以将一些标志放入 StepContext transient 用户数据 (setTransientUserData( )) 中的对象中。在 ItemWriter close 方法中,您可以从 Step Context 中获取临时用户数据,并根据其中的内容采取相应的操作。
或者只需在 ItemReader 中的 catch block 中设置标志来处理从 readItem 中抛出的任何内容。

关于java - 如何识别 ItemWriter 中的异常(由 ItemReader、readItem 方法发生),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53618236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com