web-dev-qa-db-fra.com

Différences entre la propagation require_new et la propagation imbriquée dans les transactions Spring

Je ne comprends pas la différence de comportement entre le PROPAGATION_REQUIRES_NEW et PROPAGATION_NESTED politiques de propagation. Il me semble que dans les deux cas, le processus actuel est annulé mais pas la totalité de la transaction. Un indice?

68
Alexis Dufrenoy

Voir ce lien: PROPAGATION_NESTED contre PROPAGATION_REQUIRES_NEW? Juergen Hoeller l'explique très bien

PROPAGATION_REQUIRES_NEW démarre une nouvelle transaction "interne" indépendante pour la portée donnée. Cette transaction sera validée ou annulée complètement indépendante de la transaction externe, ayant sa propre portée d'isolement, son propre ensemble de verrous, etc. La transaction externe sera suspendue au début de la transaction interne et reprendra une fois la transaction interne terminée. terminé. ...

PROPAGATION_NESTED d'autre part démarre une transaction "imbriquée", qui est une véritable sous-transaction de la transaction existante. Ce qui se passera, c'est qu'un point de sauvegarde sera pris au début de la transaction imbriquée. Si la transaction imbriquée échoue, nous retournerons à ce point de sauvegarde. La transaction imbriquée fait partie de la transaction externe, elle ne sera donc validée qu'à la fin de la transaction externe. ...

95
Ralph

PROPAGATION_REQUIRES_NEW: utilise une transaction complètement indépendante pour chaque étendue de transaction affectée. Dans ce cas, les transactions physiques sous-jacentes sont différentes et peuvent donc être validées ou annulées indépendamment, une transaction externe n'étant pas affectée par l'état de restauration d'une transaction interne.

PROPAGATION_NESTED: utilise une seule transaction physique avec plusieurs points de sauvegarde vers laquelle elle peut revenir. Ces annulations partielles permettent à une étendue de transaction interne de déclencher une annulation de son étendue, la transaction externe pouvant continuer la transaction physique malgré certaines opérations ayant été annulées. Ce paramètre est généralement mappé sur des points de sauvegarde JDBC, il ne fonctionnera donc qu'avec les transactions de ressources JDBC.

vérifier documentation de printemps

12
Nandkumar Tekale