Récemment, j'ai rencontré une situation où la transaction ne recule pas. J'ai également envisagé de dire qu'il y a des bogues dans les transactions de JPA? Je pense trop ...
Afin d'imprimer clairement les journaux, j'ajoute TyrCatch pour imprimer les journaux dans la capture. Mais la situation ici vient. Lorsque cette méthode est anormale, le journal est imprimé, mais la transaction ajoutée n'est pas enroulée.
exemple:
Des méthodes comme celle-ci ne font pas de retour (une méthode Erreurs, l'autre méthode ne fait pas de retour):
if (usersave) {try {userdao.save (user); userCapabilityquotadao.save (capabilityquota); } catch (exception e) {logger.info ("Capacité à ouvrir l'interface, exception d'ouverture du compte, informations d'exception:" + e); }}La méthode suivante recule (les erreurs de la méthode, l'autre méthode recule):
if (usersave) {try {userdao.save (user); userCapabilityquotadao.save (capabilityquota); } catch (exception e) {logger.info ("Capacité à ouvrir l'interface, exception d'ouverture du compte, informations d'exception:" + e); lancer un nouveau runtimeException (); }}ou:
if (usersave) {try {userdao.save (user); userCapabilityquotadao.save (capabilityquota); } catch (exception e) {logger.info ("Capacité à ouvrir l'interface, exception d'ouverture du compte, informations d'exception:" + e); TransactionAspectSupport.CurrentTransActionStatus (). SetRollBackOnly (); }}Pourquoi tu ne peux pas sortir? ? Il ne comprend pas le mécanisme de transaction du printemps. ! !
***** La transaction de ressort par défaut n'est reculée que lorsqu'un RuntimeExceTpion non apporté se produit. *******
Le principe de la capture d'exception de Springaop: la méthode interceptée doit lancer une exception explicitement et ne peut en aucun cas être traitée. De cette façon, l'agent AOP peut capter l'exception de la méthode et revenir. Par défaut, AOP ne capte que l'exception de RuntimeException, mais peut passer.
Configurer pour prendre des exceptions spécifiques et faire du retour
En d'autres termes, n'utilisez pas TryCatch dans la méthode de service ou ajoutez ThrownewRuntimeExCetpion () au Catch, afin que le programme puisse être capturé par AOP et renversé lorsque le programme est exceptionnel.
Solution:
La solution 1. Par exemple, si la couche de service gère les transactions, la méthode du service n'effectue pas de capture d'exception, ou ajoute une instruction ThrownewRuntimeException () à l'instruction Catch, afin qu'AOP attrape l'exception puis recule, et la couche supérieure du service (client WebService, View Layer Action) doit continuer à attraper et à gérer l'exception.
Solution 2. Ajoutez: TransactionAspectSupport.CurrentTransActionStatus (). SetRollBackOnly (); Déclaration à l'instruction Catch de la méthode de la couche de service, en arrière manuellement, de sorte que la couche supérieure n'a pas besoin de gérer les exceptions (la pratique du projet actuelle)
Résumer
Ce qui précède est tout le contenu de cet article sur l'analyse des instances de recul d'exception de la transaction Spring. J'espère que ce sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!