我如何找出可以通过JdbcTemplate.execute()
方法调用引发哪些异常。我知道它会抛出DataAccessException
。但是由于DataAccessException
是抛出的实际异常的父类,因此它成为非常广泛的声明。
例如,它抛出BadSqlGrammarException
这是子类。我知道我可以在源代码中找到它,但是我想知道是否有列表或某种方法可以找到它,再加上从源代码推断可能会引起问题。原因是捕获异常,以便我可以记录它们并适当地通知用户。那么,如何才能准确地找出抛出了哪些异常?我应该这样做还是捕获DataAccessException
并记录其消息就足够了?
答案 0 :(得分:1)
您可以捕获父异常,并使用原始代码或实用程序库之一来获取异常的根本原因。 下面的原始代码示例是从catch块调用的。 异常的根本原因和消息应始终记录。通常将一个通用的异常处理程序集中化,以便仅在一个地方记录异常(例如在Spring应用程序中,我们使用 @ControllerAdvice
private static Throwable findSpecificCause(Throwable throwable) {
Throwable rootCause = getRootCause(throwable);
return (rootCause != null ? rootCause : throwable);
}
private static Throwable getRootCause(Throwable throwable) {
if (throwable == null) {
return null;
}
Throwable rootCause = null;
Throwable cause = throwable.getCause();
while (cause != null && cause != rootCause) {
rootCause = cause;
cause = cause.getCause();
}
return rootCause;
}
您还可以考虑使用类似Apache的通用lang ExceptionUtils,Spring NestedExceptionUtils或Guava中的库
另请参阅链接:Exception Root Cause