@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