선언적 거래 범위
Spring과 JPA @Transaction
주석을 사용하면 주어진 응용 프로그램 트랜잭션의 범위를 정의 할 수 있습니다.
따라서 서비스 메소드에 주석으로 @Transactional
주석 이 달린 경우 트랜잭션 컨텍스트에서 실행됩니다. 서비스 방법이 여러 DAO 또는 리포지토리를 사용하는 경우 모든 읽기 광고 쓰기 작업은 동일한 데이터베이스 트랜잭션에서 실행됩니다.
봄 @Transactional
org.springframework.transaction.annotation.Transactional
주석 (2005 년경) 스프링 프레임 워크의 1.2 버전부터 사용할 수 있으며, 그것은 다음과 같은 트랜잭션 속성을 설정할 수 있습니다 :
isolation
: 기본 데이터베이스 격리 수준
noRollbackFor
과 noRollbackForClassName
: 자바의 목록 Exception
트랜잭션 롤백을 유발하지 않고 트리거 할 수있는 클래스
rollbackFor
과 rollbackForClassName
: 자바의 목록 Exception
트랜잭션 롤백을 트리거 클래스는 경우에 슬로우되는
propagation
: Propagation
Enum에서 제공 한 트랜잭션 전파 유형 예를 들어, 트랜잭션 컨텍스트가 상속 될 수 REQUIRED
있거나 (예 :) 새 트랜잭션 컨텍스트가 작성되어야하는 경우 (예 :) REQUIRES_NEW
또는 트랜잭션 컨텍스트가 MANDATORY
없거나 (예 :) 예외가 발생하는 경우 예외가 발생해야하는 경우 현재 트랜잭션 컨텍스트가 발견되는 경우 (예를 들면 NOT_SUPPORTED
).
readOnly
: 현재 트랜잭션이 변경 사항을 적용하지 않고 데이터를 읽어야하는지 여부입니다.
timeout
: 제한 시간 초과 예외가 발생할 때까지 트랜잭션 컨텍스트를 몇 초 동안 실행할 수 있어야합니까?
value
또는 transactionManager
: TransactionManager
트랜잭션 컨텍스트를 바인딩 할 때 사용될 Spring Bean 의 이름 .
자바 EE @Transactional
javax.transaction.Transactional
주석 (2013 년경) 자바 EE 7 사양으로 추가되었습니다. 따라서 Java EE 주석은 8 년 후 Spring에 추가되었습니다.
Java EE @Transactional
는 3 가지 속성 만 정의합니다.
dontRollbackOn
: Exception
트랜잭션 롤백을 트리거하지 않고 트리거 할 수있는 Java 클래스 목록
rollbackOn
: Exception
발생시 트랜잭션 롤백을 트리거하는 Java 클래스 목록
value
: TxType
Enum 에서 제공 한 전파 전략 . 예를 들어, 트랜잭션 컨텍스트가 상속 될 수 REQUIRED
있거나 (예 :) 새 트랜잭션 컨텍스트가 작성되어야하는 경우 (예 :) REQUIRES_NEW
또는 트랜잭션 컨텍스트가 MANDATORY
없거나 (예 :) 예외가 발생하는 경우 예외가 발생해야하는 경우 현재 트랜잭션 컨텍스트가 발견되는 경우 (예를 들면 NOT_SUPPORTED
).
어느 것을 선택해야합니까?
Spring 또는 Spring Boot를 사용하는 경우 Spring @Transactional
주석을 사용하면 Java EE @Transactional
주석 보다 더 많은 속성을 구성 할 수 있습니다 .
Java EE 만 사용하고 Java EE 응용 프로그램 서버에 응용 프로그램을 배포하는 경우 Java EE``@Transactional ''주석을 사용하십시오.
Spring 또는 Java EE @Transactional
정의를 사용할 때 분리 레벨 구성이 어떻게 다른지에 대한 자세한 내용은 이 기사를 확인 하십시오 .
javax.transaction.Transactional
하여 이제 추가 조치없이 스프링 애플리케이션에서도 사용할 수 있습니다. IMO, 이것은 내 경험으로 인해 많은 개발자들이 코드 에서이 두 가지를 혼동없이 혼동하여 나중에 문제를 야기하기 때문에 디자인 관점에서 볼 때 매우 나쁜 결정이었습니다 .