我在较低级别有try/catch
个块来处理大多数错误,但我被告知我们需要一个接近顶部,基本上作为一个catch all允许程序在出现错误时继续正常运行。我在顶层放置了try/catch(Exception e)/finally
所有内容,但我们仍然遇到导致崩溃的异常。我一直在寻找任何线索的堆栈跟踪......它是这样开始的(如果有帮助,我可以发布更多信息):
111858 [SimpleAsyncTaskExecutor-2] DEBUG o.h.e.jdbc.spi.SqlExceptionHelper - could not execute statement [n/a]
java.sql.SQLIntegrityConstraintViolationException: ORA-01400: cannot insert NULL into ("DATABASE"."TABLE"."COLUMN")
奇怪的是,堆栈跟踪的其余部分永远不会回到我们的任何东西。这一切都是oracle / apache / hibernate / springframework,直到它最终结束:
at java.lang.Thread.run(Thread.java:795) [na:1.7.0]
任何想法为什么它不会回到我们的代码或如何更好地实现这个“赶上所有”? finally块用于我们想要实现的一些步骤,无论是否存在错误。
为了清晰起见,编辑,因为它可能有所帮助,这是每5分钟处理一次文件的批处理的一部分。 try / catch就像这样:
try{
//process file
}catch(Exception e){
//log exception
}finally{
//mark file as processed so it doesn't keep trying to reprocess a broken file
}
答案 0 :(得分:1)
您或您正在使用的库必须在某个地方产生一个线程,而该线程正在抛出异常。
您的选择
答案 1 :(得分:0)
我可以建议实现这个“全部捕获”的最佳想法是不要这样做。
相反,我会在班级推荐defensive programming。每个类应尽可能处理自己可能的异常。这可以节省您出现问题的时间,并且您必须追踪到哪里来。
您需要调试并找到创建线程的位置并在那里处理异常。