Middle+
Ինչ է Java-ում գործարքների տարածումը և տարածումը:
sobes.tech AI
Պատասխան AI-ից
Java-յում տրանսակցիաների propagation (տարածում) սահմանում է, թե ինչպես է տրանսակցիոն կոնտեքստը տարածվում մեթոդների միջև։ Երբ մի տրանսակցիոն մեթոդ կանչվում է մյուսից (տրանսակցիոն կամ ոչ), propagation կանոնը որոշում է, արդյոք օգտագործել գոյություն ունեցող տրանսակցիան, ստեղծել նոր կամ այլ կերպ վարել։
Spring Framework-ում ամենատարածված propagation կանոնները:
- REQUIRED: Եթե ակտիվ տրանսակցիա կա, օգտագործիր այն։ Եթե ոչ, ստեղծիր նոր։ Այս կանոնը ըստ նախնական կարգաբերում է։
- SUPPORTS: Օգտագործիր գոյություն ունեցող տրանսակցիան, եթե կա։ Եթե ոչ, կատարիր կոդը առանց տրանսակցիայի։
- MANDATORY: Օգտագործիր գոյություն ունեցող տրանսակցիան։ Եթե չկա, արտամղիր բացառություն։
- REQUIRES_NEW: Ամեն դեպքում ստեղծիր նոր, անկախ տրանսակցիա։ Եթե ակտիվ տրանսակցիա կա, այն դադարեցվում է։
- NOT_SUPPORTED: Կատարիր կոդը առանց տրանսակցիայի։ Եթե կա ակտիվ տրանսակցիա, այն դադարեցվում է։
- NEVER: Կատարիր կոդը առանց տրանսակցիայի։ Եթե կա ակտիվ տրանսակցիա, արտամղիր բացառություն։
- NESTED: Եթե կա ակտիվ տրանսակցիա, ստեղծիր "ներգծված" (savepoint) տրանսակցիա։ Եթե ոչ, վարու որպես REQUIRED։ Ներգծված տրանսակցիաները չեն աջակցվում բոլոր SGBD-ներով։
Օրինակ Spring-ում:
// @Transactional նշանի օգտագործում Propagation-ով
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void createUserWithIndependentOperation(User user) {
// Օգտագործողի ստեղծման տրամաբանություն
performIndependentOperation(); // Այս մեթոդը կիրականացվի նոր տրանսակցիայում
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void performIndependentOperation() {
// Անկախ գործողության տրամաբանություն
}
Propagation կանոնի ընտրությունը կախված է գործողությունների անհրաժեշտ ատոմարությունից և մեկուսացումից։ Անպատշաճ օգտագործումը կարող է հանգեցնել ցանկալի olmayan վարքագծի, օրինակ՝ փոփոխությունների կորուստ կամ բլոկավորումներ։