Sobes.tech
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 վարքագծի, օրինակ՝ փոփոխությունների կորուստ կամ բլոկավորումներ։