У меня есть 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")
Странная вещь, что остальная часть трассировка стека никогда не возвращается к чему-то, что является нашим. Это все оракул/апач/спящий режим/springframework, пока не заканчивается:
at java.lang.Thread.run(Thread.java:795) [na:1.7.0]
Любые идеи, почему он не собирается обратно в наш код или как лучше реализовать это «поймать всех»? Блок finally для некоторых шагов, которые мы хотим реализовать, есть ли ошибка или нет.
Редактировать: для большей ясности и потому что, возможно, это поможет, это часть партии, которая обрабатывает файлы каждые 5 минут. Попытка/Загвоздка вот так:
try{
//process file
}catch(Exception e){
//log exception
}finally{
//mark file as processed so it doesn't keep trying to reprocess a broken file
}
Покажите нам какой-нибудь соответствующий код, пожалуйста, как на верхнем уровне попробуйте поймать – ToYonos
@ToYonos Наверху try/catch уже существует. Это попытка {// делать вещи} catch (Exception e) {// log stuff} finally {// делать больше вещей} – Tajha