■ 스프링의 트랜잭션 지원

  ● 스프링은 코드 기반의 트랜잭션 처리(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 생성 -->
 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName" value="oracle.jdbc.OracleDriver"></property>
  <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"></property>
  <property name="username" value="ADMIN"></property>
  <property name="password" value="GUEST"></property>
 </bean>


 <!-- transactionManager -->
 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource"></property>
 </bean>

 

 <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 프로그래밍-최범균

+ Recent posts