Sobes.tech
Middle

რა არის @Transactional ანოტაცია Java-ს კონტექსტში?

sobes.tech AI

პასუხი AI-სგან

Javaда @Transactional аннотациясы декларативдүү түрдө транзакцияларды башкаруу үчүн колдонулат. Ал транзакциялардын чектерин аныктоого мүмкүндүк берет, кайсы ыкмаларды бир транзакциянын алкагында ишке ашырышы керектигин көрсөтөт.

Негизги аспекттер:

  • Интеграция: Көбүнчө Spring Framework, EJB же башка транзакцияларды башкаруучу frameworkлер менен колдонулат.
  • Прокси түзүү: Framework максаттуу объектти анноттогон ыкмалары менен каптай турган прокси объект түзөт. Анноттогон ыкманы чакырганга чейин прокси транзакцияны баштайт, жана анын аткарылышынан кийин, натыйжасына жараша аны бекитет же кайтарат (чыгарылган ката болсо).
  • Атрибуттар: Транзакциянын жүрүшүн конфигурациялоочу ар кандай атрибуттар бар, мисалы:
    • propagation: башка транзакциялык контексттен чакырылганда транзакциялык ыкма кандай жүрүшү керектигин аныктайт. Мисалы, REQUIRED, REQUIRES_NEW, SUPPORTS, NOT_SUPPORTED, NEVER, MANDATORY.
    • isolation: транзакция үчүн изоляция деңгээлин аныктайт. Мисалы, READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ, SERIALIZABLE.
    • readOnly: транзакция тек маалыматтарды окуу үчүн ишке ашырылат деп көрсөтөт, бул кейде иштөө ылдамдыгын оптималдаштырууга мүмкүндүк берет.
    • timeout: транзакция үчүн күтүүнүн убактысын белгилейт.
    • rollbackFor жана noRollbackFor: кайсы ката учурларда транзакция кайтарылышы керек же керек эместигин көрсөтөт.

Колдонуу мисалы:

// Springте колдонуу мисалы
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService {

    // Бул ыкма транзакциянын алкагында ишке ашырылат
    @Transactional
    public void createUser() {
        // Колдонуучуну түзүү жана базада сактоо логикасы
        // Эгер RuntimeException чыкса, Spring транзакцияны кайтарат
    }

    // Бул ыкма белгилүү конфигурациялар менен транзакциянын алкагында ишке ашырылат
    @Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
    public User findUserById(Long id) {
        // Колдонуучуну издөө логикасы
        return null; // Мисал
    }
}

@Transactional транзакцияларды башкарууну жөнөкөйлөтөт, программистке бизнес-логикага көңүл буруу мүмкүнчүлүгүн берет, ал эми транзакцияларды башкаруунун төмөнкү деңгээл API-лерине (мисалы, JTA же JDBC Connection) көңүл буруусуз.