Transaktionsbemærkninger: Forår vs. JTA

Udholdenhedstop

Jeg har lige annonceret det nye Lær foråret kursus med fokus på det grundlæggende i Spring 5 og Spring Boot 2:

>> KONTROLLER KURSEN

1. Oversigt

I denne vejledning diskuterer vi forskellene mellem org.springframework.transaction.annotation.Transactional og javax.transaction.Transactional kommentarer.

Vi starter med en oversigt over deres konfigurationsegenskaber. Derefter diskuterer vi, hvilke typer komponenter hver kan anvendes, og under hvilke omstændigheder vi kan bruge den ene eller den anden.

2. Konfigurationsforskelle

Forårets Transaktionel kommentar kommer med yderligere konfiguration sammenlignet med dets JTA-modstykke:

  • Isolation - Spring tilbyder transaktionsomfanget isolation gennem isolation ejendom; i JTA er denne funktion imidlertid kun tilgængelig på forbindelsesniveau
  • Formering - tilgængelig i begge biblioteker gennem formering ejendom i Spring, og værdi ejendom i Java EE; Forår tilbud Indlejret som en yderligere formeringsform
  • Skrivebeskyttet - kun tilgængelig i foråret gennem Læs kun ejendom
  • Timeout - kun tilgængelig om foråret gennem tiden er gået ejendom
  • Tilbageførsel - begge kommentarer giver tilbageførselsstyring; JTA leverer tilbagekobling og dontRollbackOn egenskaber, mens Spring har tilbageførsel til og noRollbackForplus to yderligere egenskaber: rollbackForClassName og noRollbackForClassName

2.1. Forår Transaktionel Kommentar konfiguration

Lad os som et eksempel bruge og konfigurere foråret Transaktionel kommentar om en simpel bilservice:

import org.springframework.transaction.annotation.Transactional; @Service @Transactional (isolation = Isolation.READ_COMMITTED, propagation = Propagation.SUPPORTS, readOnly = false, timeout = 30) offentlig klasse CarService {@Autowired private CarRepository carRepository; @Transactional (rollbackFor = IllegalArgumentException.class, noRollbackFor = EntityExistsException.class, rollbackForClassName = "IllegalArgumentException", noRollbackForClassName = "EntityExistsException") public Car save (Car car) {return carRepository. }}

2.3. JTA Transaktionel Kommentar konfiguration

Lad os gøre det samme for en simpel lejeservice ved hjælp af JTA Transaktionel kommentar:

import javax.transaction.Transactional; @Service @Transactional (Transactional.TxType.SUPPORTS) offentlig klasse RentalService {@Autowired private CarRepository carRepository; @Transactional (rollbackOn = IllegalArgumentException.class, dontRollbackOn = EntityExistsException.class) offentlig biludlejning (bilbil) {retur carRepository.save (bil); }}

3. Anvendelighed og udskiftelighed

JTA Transaktionel annotation gælder for CDI-styrede bønner og klasser defineret som managed beans ved hjælp af Java EE-specifikationen, mens Spring's Transaktionel annotering gælder kun for foråret bønner.

Det er også værd at bemærke, at support til JTA 1.2 blev introduceret i Spring Framework 4.0. Dermed, vi kan bruge JTA Transaktionel kommentar i forårsprogrammer. Omvendt er det dog ikke muligt, da vi ikke kan bruge Spring-annoteringer uden for Spring-konteksten.

4. Konklusion

I denne vejledning diskuterede vi forskellene mellem Transaktionel kommentarer fra Spring og JTA, og hvornår vi kan bruge en eller anden.

Som altid er koden fra denne vejledning tilgængelig på GitHub.

Persistens bund

Jeg har lige annonceret det nye Lær foråret kursus med fokus på det grundlæggende i Spring 5 og Spring Boot 2:

>> KONTROLLER KURSEN

$config[zx-auto] not found$config[zx-overlay] not found