클래스,메서드 위에 어노테이션을 추가해서 사용할 수 있다.
@Transactional 입력으로
트랜잭션 기능이 적용된 프록시 객체 생성
@Transactional(isolation=Isolation.DEFAULT)
DEFAULT
READ_UNCOMMITTED ( Dirty Read 발생 )
= 사실상 격리를 하지 않는 0레벨 격리 수준
READ_COMMITTED ( Dirty Read 방지 )
= 커밋된 데이터만 조회 가능하게 설정
REPEATABLE_READ ( Non-Repeatable Read 방지 ) = 트랜잭션이 완료될 때까지 lock 상태로 다른 사용자는 사용이 불가
SERIALIZABLE ( Phantom Read 방지 )
= 트랜잭션이 완료될 때까지 트랜잭션이 사용하고 있는 모든 영역이 lock 상태로 다른 사용자는 해당하는 영역에 접근이 불가
아래로 내려갈 수록 트랜잭션 간 충돌은 없을 수 있으나, 성능의 저하는 감당해야한다.
트랜잭션 동작 도중 다른 트랜잭션을 호출하는 상황
트랜잭션을 시작하거나 기존 트랜잭션에 참여하는 방법에 대해 결정하는 속성값
REQUIRED ( Default )
= 트랜잭션 A 안에 트랜잭션 B를 호출하는 메소드가 있다면 A는 부모 트랜잭션이 되고, B는 자식 트랜잭션이 된다. 부모 트랜잭션 안에서 자식 트랜잭션까지 함께 실행.
SUPPORTS
= 이미 시작된 트랜잭션이 있으면 참여하고, 없으면 트랜잭션없이 진행하는 옵션
REQUIRES_NEW
= 부모 트랜잭션 안에서 함수 B가 동작하는 경우에 부모 트랜잭션이 있음에도 자신의 자식 트랜잭션을 위한 트랜잭션을 새로 생성하여 동작하는 방식
NESTED
= 이미 진행중인 트랜잭션이 있는 경우에 중첩 트랜잭션을 시작하는 옵션 ( 진행중인 트랜잭션안에 트랜잭션을 하나 새로 만드는 것 )
...
@Transactional(readOnly=true)
트랜잭션을 읽기 전용 속성으로 지정
예외 발생했을 때 트랜잭션 롤백시킬 경우를 설정
@Transactional(rollbackFor=Exception.class)
@Transactional(noRollbackFor=Exception.class)
Default: RuntimeException,Error
일정 시간 내에 트랜잭션을 끝내지 못하면 롤백
@Transactional(timeout=10)