본문 바로가기

프로그램

[SPRING]스프링 트랜잭션(Rollback) 처리(@Transaction 로 처리)

반응형

@Transaction 을 통한 Rollback 처리


스프링으로 게시판 간단하게 만들어보고 있는데 역시나 어렵다. ㅠㅠ


간단한 crud를 대강 만들고 나서 트랜잭션 테스트를 하는데 안된다.


일단은 나는 annotatoin-driven 으로 하였으니 annotation기반으로 주입이 될 것이고 이게 xml설정보다 우선된다고 본 것 같다.


또한 bean 생성은 context:component-scasn 설정을 했으니 bean이 생성될 것이다.


그래서 트랜잭션 처리도 @Transaction 을 통해 처리하기로 했다.


일단 구글링 통해서 알아보니 @Transaction 을 사용하기 위해서는 

<tx:annotation-drivven> 을 xml파일에 설정해줘야 한다.


그리고 사용하려는 서비스 의 구현Class 혹은 구현Method 에 @Transaction 을 주면 된다.


이 경우 디폴트 설정값은 다음과 같다.

txManager를 별도로 선언할 경우는 다음과 같이 하면 될 것 같다.


<tx:annotation-driven transaction-manager="txManager"/>


<!-- a PlatformTransactionManager is still required -->

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<!-- (this dependency is defined somewhere else) -->

<property name="dataSource" ref="dataSource"/>

</bean>


아 어렵다.-_-;


일단 이런거 다 떄려치고 난 default 로 하였다.


@Transaction 의 속성값은 다음과 같다.

  • 위임(propagation)     enum: Propagation 선택적인 위임 셋팅
  • 격리(isolation)         enum: Isolation 선택적인 위임 레벨
  • 읽기전용(readOnly) boolean 읽기/쓰기 대 읽기전용 트랜잭션
  • 타임아웃(timeout)         int (초단위) 트랜잭션 타임아웃
  • rollbackFor                 Throwable로부터 유래되는 Class 객체의 배열 롤백을 야기해야하는 예외 클래스의 선택적인 배열.
  • rollbackForClassname 클래스명의 배열. Throwable로부터 유래되는 클래스 롤백을 야기해야하는 예외 클래스 이름의 선택적인 배열
  • noRollbackFor         Throwable로부터 유래된 Class 객체의 배열 롤백을 야기하지 않는 예외 클래스의 선택적인 배열.
  • noRollbackForClassname Throwable로부터 유래되는 String 클래스 명의 배열 롤백을 야기하지 않는 예외 클래스의 선택적인 배열.


참고 url : http://openframework.or.kr/framework_reference/spring/ver2.x/html/transaction.html