0

我面临着一个非常特殊的情况。我正在使用带有 spring 3.0.5 的休眠模板进行数据库操作。当我第一次尝试插入用户模型时,抛出了一个 DataAccessException,我抓住了它。现在我希望重试相同的数据库操作 3 次。第二次时,没有抛出异常。

这是代码:

package com.user.profile.dao;

@Repository("userProfileDAOImpl")
public class UserProfileDAOImpl implements IUserProfileDAO {

@Autowired
private HibernateTemplate hibernateTemplate;

public Long insertUserProfileData(User user) throws AppNonFatalException {
Long id = null;
int retryCount = 0;

while (retryCount < 3) {
try {
id = (Long)hibernateTemplate.save(user);
}
catch (DataAccessException e) {
e.printStackTrace();
retryCount++;
System.out.println("Retry Count = " + retryCount); 
if (retryCount > 3) {
throw new AppNonFatalException(e.getLocalizedMessage(), "10000", e.getMessage(), e);
} 
}
catch (Exception e) {
/* not coming inside this block too second time onwards */
System.out.println("Pure Exception");
}
}

return id;
}

}

我读到不应捕获 RuntimeExceptions。那我该如何重试操作。我应该在服务层重试吗?我错过了什么吗?任何帮助表示赞赏。

4

1 回答 1

1

来自https://community.oracle.com/docs/DOC-983543

未经检查的异常是不需要在 throws 子句中声明的异常。它们扩展了 RuntimeException。未经检查的异常表示可能是由于代码中的错误导致的意外问题。

由于DataAccessExceptionis a RuntimeException,您可能想要检查异常的真正原因并修复它,而不是捕获它并重试操作。

于 2010-11-29T15:52:45.633 回答