Повторите попытку после того, как Spring выдает исключение DataAccessException. - PullRequest
0 голосов
/ 29 ноября 2010

Я сталкиваюсь с очень странной ситуацией. Я использую шаблон hibernate с пружиной 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 не должны быть перехвачены. Тогда как мне повторить операцию. Должен ли я повторить попытку на уровне обслуживания? Я что-то пропустил? Любая помощь приветствуется.

1 Ответ

1 голос
/ 29 ноября 2010

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

Непроверенные исключения являются исключениями которые не должны быть объявлены в бросает оговорку. Они расширяются RuntimeException. Непроверенный исключение указывает на неожиданное проблема, которая, вероятно, из-за ошибки в коде.

Поскольку DataAccessException является RuntimeException, вы можете проверить, что является реальной причиной исключения, и исправить его, а не перехватить и повторить операцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...