■ 스프링의 트랜잭션 지원
● 스프링은 코드 기반의 트랜잭션 처리(Programmatic Transaction) 뿐만 아니라 선언적 트랜잭션(Declarative Transaction)을 지원하고 있다. 스프링이 제공하는 트랜잭션 템플릿 클래스를 이용하거나 설정 파일, 어노테이션을 이용해서 트랜잭션의 범위 및 규칙을 정의할 수 있다.
■ 선언적 트랜잭션 처리
● 선언적 트랜잭션은 설정 파일이나 어노테이션을 이용해서 트랜잭션의 범위, 롤백 규칙 등을 정의
● 다음과 같은 2가지 방식으로 정의
▶ <tx:advice> 태그를 이용한 트랜잭션 처리
▶ @Transactional 어노테이션을 이용한 트랜잭션 설정
◆ @Transactional 어노테이션을 이용한 트랜잭션 처리
● tx 네임스페이스를 추가 후 다음과 같은 형태로 작성
xmlns:tx="http://www.springframework.org/schema/tx"
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
<!-- 1. dataSource 생성 -->
<tx:annotation-driven transaction-manager="transactionManager"/> |
▶ <tx:annotation-driven> 태그 대신 PersistenceAnnotationBeanPostProcessor 클래스를 빈으로 등록해도 됨 => <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
● @Transactional 어노테이션의 주요 속성
속성 |
설 명 |
propagation |
트랜잭션 전파 규칙을 설정. Propagation 열거형 타입에 값이 정의되어 있음 기본값은 Propagation.REQUIRED |
isolation |
트랜잭션 격리 레벨을 설정. Isolation 열거형 타입에 값이 정의되어 있음 |
readOnly |
읽기 전용 여부를 설정. boolean 값을 설정하며, 기본값은 false |
rollbackFor |
트랜잭션을 롤백할 예외 타입을 설정 예, rollbackFor={Exception.class} |
noRollbackFor |
트랜잭션을 롤백하지 않을 예외 타입을 설정 예, noRollbackFor={ItemNotFoundException.class} |
timeout |
트랜잭션의 타임아웃 시간을 초 단위로 설정 |
● <tx:annotation-driven> 태그의 속성
속성 값 |
설 명 |
기본값 |
transaction-manager |
사용할 PlatformTransactionManager 빈의 이름 |
transactionManager |
proxy-target-class |
클래스에 대해서 프록시를 생성할 지의 여부. true일 경우 CGLIB를 이용해서 프록시를 생성하며, false인 경우 자바 다이나믹 프록시를 이용해서 프록시를 생성 |
false |
order |
Advice 적용 순서 |
int의 최대값 (가장 낮은 순위) |
[참고자료] Spring 3.0 프로그래밍-최범균
'프로그램 > Spring 3.0' 카테고리의 다른 글
[예제-2] 선언적 트랜잭션 - @Transactional, AOP, @Aspect (0) | 2012.05.25 |
---|---|
[예제-1] 선언적 트랜잭션 - <tx:advice>, AOP, @Aspect (0) | 2012.05.25 |
스프링의 트랜잭션 관리 - 선언적 트랜잭션(<tx:advice>) (0) | 2012.05.25 |
[예제] 게시판 상세보기 샘플소스(@Autowired, @Component, @Aspect 적용) (0) | 2012.05.24 |
[예제] 게시판 상세보기 샘플소스(@Autowired, @Component, @Controller, aop 태그 적용) (0) | 2012.05.24 |