Middle
Ինչ է @Transactional նշումը Java-ի համատեքստում?
sobes.tech AI
Պատասխան AI-ից
@Transactional նշումը Java- ում օգտագործվում է հայտարարական տրանսակցիաների կառավարման համար: Այն թույլ է տալիս սահմանել տրանսակցիաների սահմանները, նշելով, թե որ մեթոդները պետք է կատարվեն մեկ տրանսակցիայի շրջանակում:
Հիմնական аспектներ:
- Ինտեգրացիա: Ամենից հաճախ օգտագործվում է Spring Framework-ով, EJB-ով կամ այլ ֆրեյմվորկներով, որոնք տրամադրում են տրանսակցիաների կառավարման հնարավորություններ:
- Պրոքսիավորում: Ֆրեյմվորկը ստեղծում է պրոքսի օբյեկտ, որը շրջապատում է նպատակային օբյեկտը նշված մեթոդներով: Նախքան նշված մեթոդի կանչը, պրոքսը սկսում է տրանսակցիան, իսկ նրա կատարման ավարտին՝ հաստատում կամ հետ է մղում այն՝ կախված արդյունքից (առկա է արտահայտություն):
- Ատրիբուտներ: Տարբեր ատրիբուտներ կան տրանսակցիայի վարքագիծը կարգավորելու համար, օրինակ՝
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։