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. ნესტირებული ტრანზაქციები არ მხარდაჭერილია ყველა DB-ს მიერ.

Spring-ში გამოყენების მაგალითი:

// @Transactional ანოტაცია propagation-თან ერთად
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void createUserWithIndependentOperation(User user) {
    // მომხმარებლის შექმნის ლოგიკა

    performIndependentOperation(); // ეს მეთოდი შესრულდება ახალი ტრანზაქციით
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void performIndependentOperation() {
    // დამოუკიდებელი ოპერაციის ლოგიკა
}

Propagation-ის წესის არჩევა დამოკიდებულია ოპერაციების ატომარობისა და იზოლაციის მოთხოვნებზე. არასწორი გამოყენება შეიძლება გამოიწვიოს არასასურველი ქცევით, მაგალითად, ცვლილებების დაკარგვა ან ბლოკირებები.