Sobes.tech
Middle+

Чӣ гуна паҳн кардани транзаксияҳо дар Java?

sobes.tech AI

Ҷавоб аз AI

Дарсгирӣ (пропаганда) транзаксияҳо дар Java муайян мекунад, ки чӣ гуна контексти транзаксионӣ байни методҳо паҳн мешавад. Вақте ки як методи транзаксионӣ аз дигар (транзаксионӣ ё не) даъват мешавад, қоидаи пропаганда қарор мекунад, ки оё транзаксияи мавҷударо истифода барем, нав созем ё дигар рафтор кунем.

Қоидаҳои маъмултарини пропаганда дар Spring Framework:

  • 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() {
    // Логикаи амалиёти мустақил
}

Интихоби қоидаи пропаганда вобаста аст аз сатҳи атомарӣ ва изолатсияи талабшудаи амалҳо. Истифодаи нодуруст метавонад ба рафтори номувофиқ оварда расонад, масалан, аз даст додани тағйирот ё бастаниҳо.