Retry nach Frühling wirft DataAccessException nicht funktioniert
-
29-09-2019 - |
Frage
Ich bin vor eine ganz besondere Situation. Ich verwende Hibernate-Vorlage mit Feder 3.0.5 für DB-Operationen. Wenn ich versuche, ein User-Modell zum ersten Mal einlegen, wird ein DataAccessException geworfen, die ich fangen. Nun wünsche ich den gleichen DB-Betrieb für etwa 3-mal wiederholen. Das zweite Mal, wenn es keine Ausnahme ausgelöst wird.
Hier ist der Code:
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;
}
}
Ich habe gelesen, dass Runtime sollte nicht gefangen werden. Dann, wie Sie wiederholen ich den Vorgang. Soll ich bei der Dienstschicht wiederholen? Bin ich etwas fehlt? Jede Hilfe ist willkommen.
Lösung
https://community.oracle.com/docs/DOC-983543:
Ungeprüfter Ausnahmen sind Ausnahmen , die nicht in einem zu erklären muß throws-Klausel. sie erstrecken sich Runtime. ein ungeprüfter Ausnahme zeigt ein unerwartetes Problem, das vermutlich aufgrund eines Fehlers ist im Code.
Da DataAccessException
ein RuntimeException
ist, könnten Sie prüfen wollen, was die eigentliche Ursache für die Ausnahme ist und es zu beheben, anstatt sie zu kontrollieren und wiederholen Sie den Vorgang.