Transakcijske bilješke: Proljeće nasuprot JTA
Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:
>> PROVJERITE TEČAJ1. Pregled
U ovom uputstvu ćemo razgovarati razlike između org.springframework.transaction.annotation.Transactional i javax.transaction.Transational bilješke.
Započet ćemo s pregledom njihovih konfiguracijskih svojstava. Zatim ćemo razgovarati o tome na koje se vrste komponenata može primijeniti i u kojim okolnostima možemo koristiti jednu ili drugu.
2. Razlike u konfiguraciji
Proljetni Transakcijski napomena dolazi s dodatnom konfiguracijom u usporedbi s JTA kolegom:
- Izolacija - Spring nudi izolaciju obuhvaćenu transakcijama putem izolacija imovina; međutim, u JTA-u je ova značajka dostupna samo na razini veze
- Razmnožavanje - dostupno u obje knjižnice putem razmnožavanje imanje u proljeće i vrijednost svojstvo u Java EE; Proljetne ponude Ugniježđena kao dodatni tip širenja
- Samo za čitanje - dostupno samo u proljeće do samo za čitanje imovine
- Istek vremena - dostupan samo u proljeće do pauza imovine
- Povrat - obje bilješke nude upravljanje povratom; JTA pruža rollbackOn i dontRollbackOn svojstva, dok proljeće ima vraćanje za i noRollbackFor, plus dva dodatna svojstva: rollbackForClassName i noRollbackForClassName
2.1. Proljeće Transakcijski Konfiguracija bilješki
Kao primjer, upotrijebimo i konfigurirajte Spring Transakcijski napomena o jednostavnom servisu automobila:
uvoz org.springframework.transaction.annotation.Transactional; @Service @Transactional (isolation = Isolation.READ_COMMITTED, propagation = Propagation.SUPPORTS, readOnly = false, timeout = 30) javna klasa CarService {@Autowired private CarRepository carRepository; @Transactional (rollbackFor = IllegalArgumentException.class, noRollbackFor = EntityExistsException.class, rollbackForClassName = "IllegalArgumentException", noRollbackForClassName = "EntityExistsException") javni povratak automobila (CarReRequest) carve; }}
2.3. JTA Transakcijski Konfiguracija bilješki
Učinimo isto za jednostavnu uslugu najma koja koristi JTA Transakcijski napomena:
import javax.transaction.Transactional; @Service @Transactional (Transactional.TxType.SUPPORTS) javna klasa RentalService {@Autowired private CarRepository carRepository; @Transactional (rollbackOn = IllegalArgumentException.class, dontRollbackOn = EntityExistsException.class) javni Najam automobila (Car car) {return carRepository.save (car); }}
3. Primjenjivost i zamjenjivost
JTA Transakcijski napomena odnosi se na CDI-upravljane grahove i klase definirane kao upravljani grah Java EE specifikacijom, dok Spring-ove Transakcijski napomena odnosi se samo na proljetni grah.
Također je vrijedno napomenuti da je podrška za JTA 1.2 uvedena u Spring Framework 4.0. Tako, možemo koristiti JTA Transakcijski napomena u proljetnim aplikacijama. Međutim, obrnuto nije moguće jer ne možemo koristiti proljetne bilješke izvan proljetnog konteksta.
4. Zaključak
U ovom vodiču razgovarali smo o razlikama između Transakcijski napomene iz Springa i JTA-e te kada možemo koristiti jedno ili drugo.
Kao i uvijek, kôd iz ovog vodiča dostupan je na GitHub-u.
Dno postojanosti