개요
Spring+iBatis 트랜잭션 관리 방법에 대해 설명합니다.
방법
1. BMT(Bean Managed Transaction), 명시적 트랜잭션 관리(소스에서 트랜잭션 처리를 고려하는 방법)
1-1. DataSourceTransactionManager 를 직접사용하는 경우
1-2. TransactionTemplate 를 사용하는 경우
2. CMT(Container Managed Transaction), 선언적 트랜잭션 관리(설정화일을 이용하고, 소스에서는 트랜잭션 처리를 위한 고려를 줄이는 방법)
2-1. <tx:advice> 태그를 이용한 방법
2-2. TransactionProxyFactoryBean 태그를 이용한 방법
2-3 @Transactional 어노테이션을 이용한 방법
상세 설명
공통 적용사항
applicationContext.xml
1-1. DataSourceTransactionManager 를 직접사용하는 경우
- 설정 파일 : 추가적으로 설정할 것이 없습니다.
- 소스 상에서 직접 commit, rollback 처리를 해아합니다.
트랜잭션으로 처리를 해주기 위해서는 setAutoCommit(false)를 호출해야 합니다.
주의할점은, blob select시에는 필히 setAutoCommit(false)를 호출해 주어야 한다는 것입니다.
1-2. TransactionTemplate 를 사용하는 경우
설정 파일
- 소스 상에서 transactionTemplate.execute(), doInTransaction() 등의 함수를 이용하여야 합니다.
- 주의할 점은 blob select시에 기존 오라클에서는 트랜잭션 처리를 해주지 않았겠지만 알티베이스로 사용시에는 꼭, 소스상에서 transactionTemplate.execute(), doInTransaction() 등의 함수를 이용하여 트랜잭션 처리를 해주어야 한다는 점입니다.
2-1. <tx:advice> 태그를 이용한 방법
설정 파일
- 소스 상에는 트랜잭션 관련 코드 필요 없습니다.
2-2. TransactionProxyFactoryBean 태그를 이용한 방법
설정 파일
- 소스 상에는 트랜잭션 관련 코드 필요 없습니다.
2-3 @Transactional 어노테이션을 이용한 방법
설정 파일
- 소스 상에서 트랜잭션이 필요한 클래스는 @Transactional(propagation=Propagation.REQUIRED) 표기가 필요합니다.
참고
표준프레임워크에서 안내하는 AltibaseClobStringTypeHandler 를 적용하면 CLOB 이 0 byte 인 경우에 오류가 발생할 수 있습니다.
이 경우는 TypeHandler 를 사용하지 않고 어노테이션 추가하여 정상적으로 조회 되는 것을 확인할 수 있습니다.
샘플 코드
LOB 데이터 처리하는 샘플 코드입니다.