Spring - jdbcTemplate - DataAccessException

时间:2015-04-21 13:20:43

标签: java sql spring sqlexception

我的目标是在应用程序中分析SQL异常,并根据异常的类型决定是重试SQL还是中止。例如,如果是连接错误(网络无法访问),我想重试,因为它可能在将来某个时候成功。但是,如果由于" constraintViolation"而导致错误,则无需重试,因为它将再次失败。 我读到了有关TransientDataAccessException和NonTransientDataAccessException的信息,我认为它很合适。我会做的

try{
    jdbcTemplate.update(sql,...);
} catch (DataAccessException){
    if(e instanceof NonTransientDataAccessException) {
        logger.error("No need to retry, we will get the same exception " + e);  
    } else if(e instanceof TransientDataAccessException){       
        logger.error("Transient Exception - we will retry " + e);
    }
}

它对于约束违规工作正常但是当我暂时断开网络连接时,我得到了另一种类型的异常:CannotCreateTransactionException,它不从DataAccessException继承。所以我认为它打破了瞬态/非瞬态数据访问异常的所有好主意。你怎么看? 有没有更好的方法来实现我需要做的事情?

0 个答案:

没有答案