Повторите попытку после того, как Spring выдает исключение DataAccessException.

0

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

Теги:
spring-mvc
hibernate
runtimeexception

1 ответ

1
Лучший ответ

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

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

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

  • 0
    Возможно, у вас есть ошибка в отображениях yout, или соединение не удается, и т. Д. Если вы опубликуете трассировку стека исключения, возможно, я смогу дать вам более точный совет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню