Sobes.tech
Middle+

Mis on tehingute levitamine ja levitamine Java-s?

sobes.tech AI

Vastus AI-lt

Java propagācija (propagation) nosaka, kā transakcijas konteksts izplatās starp metodēm. Izsaucot transakcijas metodi no cita metodes (transakcijas vai nē), propagācijas noteikumi lemj, vai izmantot esošo transakciju, izveidot jaunu vai rīkoties citādi.

Visbiežāk izmantotie propagācijas noteikumi Spring Framework:

  • REQUIRED: Ja ir aktīva transakcija, izmanto to. Ja nav, izveido jaunu.
  • SUPPORTS: Izmanto esošo transakciju, ja tā ir. Ja nav, izpildi kodu bez transakcijas.
  • MANDATORY: Izmanto esošo transakciju. Ja nav, izmet izņēmumu.
  • REQUIRES_NEW: Vienmēr izveido jaunu, neatkarīgu transakciju. Ja esošā transakcija ir aktīva, tā tiek apturēta.
  • NOT_SUPPORTED: Izpildi kodu bez transakcijas. Ja ir aktīva transakcija, tā tiek apturēta.
  • NEVER: Izpildi kodu bez transakcijas. Ja ir aktīva transakcija, izmet izņēmumu.
  • NESTED: Ja ir aktīva transakcija, izveido "iekļauto" transakciju (savepoint). Ja nav, rīkojies kā REQUIRED. NESTED transakcijas nav atbalstītas visās DB sistēmās.

Piemērs Spring izmantošanai:

// @Transactional anotācija ar propagation
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void createUserWithIndependentOperation(User user) {
    // Lietotāja izveides loģika

    performIndependentOperation(); // Šī metode tiks izpildīta jaunā transakcijā
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void performIndependentOperation() {
    // Neatkarīgas operācijas loģika
}

Propagācijas noteikuma izvēle ir atkarīga no operāciju atomarības un izolācijas prasībām. Nepareiza izmantošana var novest pie nevēlamas uzvedības, piemēram, izmaiņu zuduma vai bloķēšanas.