Verschillen tussen required_new en geneste propagatie in Spring-transacties

Ik begrijp het gedragsverschil tussen het propagatiebeleid PROPAGATION_REQUIRES_NEWen PROPAGATION_NESTEDniet. Het lijkt mij dat in beide gevallen het huidige proces wordt teruggedraaid, maar niet de hele transactie. Enig idee?


Antwoord 1, autoriteit 100%

Zie deze link: PROPAGATION_NESTED versus PROPAGATION_REQUIRES_NEW?Juergen Hoeller leg het heel goed uit. — het Spring Source Forum is sinds 28 februari 2019 volledig offline, maar je kunt het relevante deel van het artikel lezen in het onderstaande citaat

PROPAGATION_REQUIRES_NEW start een nieuwe, onafhankelijke “innerlijke” transactie
voor het gegeven bereik. Deze transactie wordt vastgelegd of teruggedraaid
volledig onafhankelijk van de uiterlijke transactie, met zijn eigen
isolatiebereik, zijn eigen set sloten, enz. De buitenste transactie zal:
worden geschorst aan het begin van de binnenste, en hervat zodra de
innerlijke is voltooid. …

PROPAGATION_NESTED daarentegen start een “geneste” transactie,
wat een echte subtransactie is van de bestaande. Wat zal er gebeuren
is dat er een savepoint wordt genomen aan het begin van de geneste
transactie. Als de geneste transactie mislukt, keren we terug naar
dat spaarpunt. De geneste transactie maakt deel uit van de outer
transactie, dus deze wordt pas aan het einde van de buitenste
transactie. …


Antwoord 2, autoriteit 13%

PROPAGATION_REQUIRES_NEW: gebruikt een volledig onafhankelijke transactie voor elk betrokken transactiebereik. In dat geval zijn de onderliggende fysieke transacties verschillend en kunnen ze dus onafhankelijk worden vastgelegd of teruggedraaid, waarbij een externe transactie niet wordt beïnvloed door de terugdraaistatus van een interne transactie.

PROPAGATION_NESTED: gebruikt een enkele fysieke transactie met meerdere opslagpunten waarnaar het kan worden teruggedraaid. Met dergelijke gedeeltelijke rollbacks kan een interne transactiescope een rollback voor zijn scope activeren, waarbij de buitenste transactie de fysieke transactie kan voortzetten ondanks dat sommige bewerkingen zijn teruggedraaid. Deze instelling wordt doorgaans toegewezen aan JDBC-opslagpunten en werkt dus alleen met JDBC-brontransacties.

controleer spring documentatie


Antwoord 3

Zoek het verschil

1.) Use of NESTED Transaction

Voer uit binnen een geneste transactie als er een huidige transactie bestaat, gedraag u als PROPAGATION_REQUIRED anders.
Geneste transactie wordt ondersteund door Spring

2.)Gebruik van VEREISTE transactie
Ondersteun een huidige transactie, maak een nieuwe aan als deze niet bestaat.
. Het betekent voor bankdomeinen zoals opnemen, storten, de transactie bijwerken

3.) Gebruik van REQUIRES_NEW transactie
Maak een nieuwe transactie aan en onderbreek de huidige transactie als die bestaat.

Other episodes