【发布时间】:2014-12-20 03:54:06
【问题描述】:
我在较低级别有try/catch 块来处理大多数错误,但有人告诉我我们需要一个靠近顶部的块,基本上是为了让程序在出现错误时继续正确运行。我在顶层的所有内容周围都添加了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
}
【问题讨论】:
-
请给我们看一些相关代码,比如顶级try catch
-
@ToYonos 顶级 try/catch 已经在里面了。这是try{//do stuff}catch(Exception e){//log stuff} finally{//do more stuff}
标签: java spring hibernate exception-handling error-handling