2010-11-29 47 views
0

我面臨着一個非常奇怪的情況。我使用spring 3.0.5的hibernate模板進行數據庫操作。當我第一次嘗試插入用戶模型時,會引發DataAccessException,我會捕獲它。現在我想重試相同的數據庫操作說3次。第二次,它不會拋出異常。Spring彈出後重試DataAccessException不起作用

下面是代碼:

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

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

未檢查異常是例外 沒有需要聲明的 throws子句。它們延伸到 RuntimeException。未檢查的 異常表示意外的 問題可能是由於代碼中的錯誤 。

由於DataAccessExceptionRuntimeException,你可能要檢查什麼是異常的真正原因並解決它,而不是抓住它,然後重試操作。

+0

也許你在你的映射中有錯誤,或者連接失敗等。如果你發佈異常的堆棧跟蹤,我可能會給你一個更準確的建議。 – arturo 2010-11-29 15:59:05