Référencer Spring documentation:Les meilleures pratiques pour faire reculer les transactions au printemps 3/Mise en veille prolongée
Tout RuntimeException déclencheront rollback, et tout vérifié exception ne
Référencer javapractices.com
Décoché exceptions:
- représentent des défauts dans le programme (bogues) - arguments souvent invalides passé à une méthode non-privée. Pour citation de Java Programmation Langue, par Gosling, Arnold, et Holmes: « exceptions d'exécution Unchecked représentent des conditions qui, généralement parlant, reflètent des erreurs dans la logique de votre programme et ne peut pas être raisonnablement récupéré à l'exécution temps "
- sont sous-classes de RuntimeException et sont généralement mis en œuvre utilisant IllegalArgumentException, NullPointerException, ou IllegalStateException
- une méthode n'est pas obligé d'établir une politique pour les exceptions non vérifiées lancées par sa mise en œuvre (et ils presque toujours ne font pas donc)
exceptions cochés:
- représentent des conditions non valides dans les zones en dehors de la con immédiate trôle de le programme (d'entrée d'utilisateur non valide, les problèmes de base de données , pannes de réseau, fichiers absents)
- sont sous-classes d'exception
- une méthode est tenu d'établir une politique pour toutes les exceptions vérifiées lancées par sa mise en œuvre (soit passer l'exception vérifiée plus haut la pile, ou de le manipuler en quelque sorte)
Si au cours de ma logique métier, je découvre un problème et je veux rollback les changements, je dois lancer une nouvelle course timeException? Ce n'est pas vraiment une exception RuntimeException (exception non vérifiée) puisque je l'ai identifiée dans la logique. Ou peut-être que je suis mal compris ces concepts?
Ma vraie question, quelles sont les meilleures pratiques pour annuler une transaction dans mes méthodes de service @Transactional?
Comment puis-je retourner quelque chose de ma méthode si je lance une exception? De plus, lancer une exception est assez coûteux. N'y a-t-il aucun moyen de restaurer manuellement la transaction sans déclencher une exception? –
@GuillaumePolet On pourrait dire que si vous faites volontairement un retour en arrière dans le cadre d'un flux de processus métier non exceptionnel, les coûts associés aux annulations dans un SGBDR éclipsent de plusieurs ordres le coût réel ou perçu d'une exception sur un modem moderne. JVM, et le design entier devrait être revisité. Peu importe, si vous n'aimez pas la façon dont fonctionnent les transactions déclaratives ... ne les utilisez pas. La fonctionnalité n'est en aucun cas votre seule option. Vous pouvez toujours utiliser les anciennes transactions de session de mise en veille prolongée roll-your-own. – Affe