Maison  >  Questions et réponses  >  le corps du texte

Problème d'annulation de transaction au printemps

Spring choses, injecter des choses dans la couche de service, effectuer deux opérations d'insertion, devez-vous lancer vous-même une exception dans la méthode de service, puis spécifier une restauration ? Ou une insertion sera-t-elle annulée sans lever d'exception en cas d'échec ?
L'implémentation proxy dao de mybatis est utilisée ici. Y aura-t-il une invite ou une exception levée en cas d'échec de l'insertion ?

漂亮男人漂亮男人2686 Il y a quelques jours898

répondre à tous(4)je répondrai

  • 怪我咯

    怪我咯2017-06-12 09:26:47

    Utilisez l'annotation @Transaction(rollbackFor=Throwable.class) sur la classe Service ou une méthode spécifique. Il convient de noter que l'annotation @Transaction capture et annule uniquement RuntimeException par défaut, c'est-à-dire que si vous lancez une exception, elle ne sera pas annulée, donc vous. N'oubliez pas d'ajouter rollbackFor=Throwable.class pour spécifier que toutes les exceptions seront annulées

    répondre
    0
  • 高洛峰

    高洛峰2017-06-12 09:26:47

    Je suis d'accord avec la réponse de @Positive Energy Frontline et j'ajoute que si vous effectuez plusieurs opérations dans une méthode, vous devez prendre en compte la portée de propagation de la transaction. Bien sûr, la valeur par défaut est propagation = Propagation.REQUIRED, ce qui signifie : S'il y a. Il n'y a pas de transaction actuellement, créez-en une nouvelle. Une transaction. S'il y a déjà une transaction, ajoutez-la à cette transaction.

    répondre
    0
  • 淡淡烟草味

    淡淡烟草味2017-06-12 09:26:47

    Si une exception de compilation est levée, pouvez-vous l'attraper et la gérer vous-même ? Puisque vous utilisez le framework Spring et interceptez et gérez l'exception vous-même, le framework ne vous aidera pas à revenir en arrière. fichier de configuration spring.La stratégie de roll est conforme à ce qui a été dit au premier étage, à savoir que l'opération par défaut est une annulation d'exception. Les transactions sont ajoutées à la couche de service. Vos deux méthodes d'insertion n'ont pas de transactions elles-mêmes, il n'est donc pas nécessaire de prendre en compte la propagation. comportement.

    répondre
    0
  • 淡淡烟草味

    淡淡烟草味2017-06-12 09:26:47

    Après avoir lu les deux réponses précédentes, j'ajouterai quelque chose. Les transactions au Spring sont par défaut des proxys JDK basés sur l'interface. Ainsi, pour les deux méthodes d'insertion appelées dans votre couche Service, si insert est également une méthode de couche service, il doit s'agir d'une méthode d'interface. S'il s'agit d'une méthode privée, la méthode privée ne sera pas annulée. Faites également attention aux problèmes de transaction dans les situations multithread.

    répondre
    0
  • Annulerrépondre