Spring抛出后重试DataAccessException无法正常工作

时间:2010-11-29 12:21:15

标签: mysql hibernate spring-mvc runtimeexception

我面临一种非常特殊的情况。我正在使用带有spring 3.0.5的hibernate模板进行数据库操作。当我第一次尝试插入User模型时,抛出了一个DataAccessException,我抓住了它。现在我希望重试相同的DB操作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。然后我该如何重试该操作。我应该在服务层重试吗?我错过了什么吗?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

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

  

未经检查的例外是例外情况   不需要在a中声明   抛出条款。他们延伸   RuntimeException的。一个未经检查的   异常表示意外   问题可能是由于一个bug   在代码中。

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