1. 트랜잭션 전파
- PROPAGATION_REQUIRED
- 가장많이 사용되는 트랜잭션 전파 속성
- 진행 중인 트랜잭션이 없으면 새로 시작, 이미 시작된 트랜잭션이 있으면 이에 참여
- PROPAGATION_REQUIRES_NEW
- 항상 새로운 트랜잭션을 시작한다.
- 독립적인 트랜잭션이 보장돼야 하는 코드에 적용
- PROPAGATION_NOT_SUPPORTED
- 트랜잭션 없이 동작하도록 만든다.
- 모든 메소드에 AOP 적용 후 특정 메소드에는 AOP를 적용하고 싶지 않을 경우 많이 사용한다.
2. 격리 수준
- 서버환경에서 여러개 트랜잭션이 진행 될 때, 작업에 대한 격리 수준
- DefaultTransactionDefinition에 설정된 격리수준은 ISOLATION_DEFAULT
- ISOLATION_DEFAULT는 DataSource에 디폴트 격리수준을 따르는 설정
3. 제한시간
- 트랜잭션을 수행하는 제한시간을 설정
- DefaultTransactionDefinition의 기본 설정은 제한시간이 없다.
- 트랜잭션을 직접 시작할 수 있는 PROPAGATION_REQUIRED, PROPAGATION_REQIRES_NEW를 써야 의미가 있음
4. 읽기전용
- 트랜잭션 내에서 데이터를 조작하는 시도를 막아준다.
- 데이터 엑세스 기술에 따라 성능이 향상될 수 있다.
TransactionInterceptor
- PlatformTransactionManager와 Properties 타입의 두가지 프로퍼티를 갖음
- Properties 타입인 프로퍼티 이름은 transactionAttributes이며,
TransactionDefinition의 네가지 항목 + rollbackOn() 를 갖고 있는 TrasactionAttribute 인터페이스로 정의 - rollbackOn()을 활용하면 특정 체크 예외의 경우 트랜잭션을 롤백시킬 수 있음,
특정 런타임 예외에 대해서 트랜잭션 커밋시킬 수도 있음 - Properties 타입의 transactionAttributes 프로퍼티는 메소드 패턴과 트랜잭션 속성을 키와 값으로 갖는 컬렉션
- PROPAGATION_NAME: 트랜잭션 전파 방식, PROPAGATION_으로 시작한다. (필수)
- ISOLATION_NAME: 격리수준, ISOLATION_으로 시작한다. (생략가능, 디폴트: 격리수준)
- readOnly: 읽기전용 항목 (생략가능, 디폴트:읽기전용)
- timeout_NNNN: 제한시간, timeout_으로 시작하고 초 단위 시간을 뒤에 붙인다. (생략가능)
- -Exception1: 체크 예외중 롤백 대상으로 추가할 것을 넣는다 (한개 이상 가능)
- +Exception1: 런타임 예외지만 롤백시키지 않을 예외를 넣는다 (한개 이상 가능)
<bean id="transactionAdvice" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED,readOnly,timeout_30</prop>
<prop key="upgrade*">PROPAGATION_REQUIRES_NEW,ISOLATION_SERIALIZABLE</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
- - upgrade로 시작하는 메소드는 항상 독립적인 트랜잭션으로 동작 (PROPAGATION_REQUIRES_NEW)
- 완벽하게 고립된 상태에서 동작하도록 격리 수준을 최고 수준인 ISOLATION_SERIALIZABLE로 설정
- - *만 사용해서 위에 두가지 조건에 해당하지 않는 나머지 모든 메소드에 사용될 속성을 지정
'개발서적 > 토비 스프링 3.1-Vol.1' 카테고리의 다른 글
[토비의 스프링 - Vol.1] 내가 몰랐던 용어 정리 (0) | 2021.05.15 |
---|---|
[토비의 스프링 - Vol.1]7장 XML SQL 서비스 실습(리스트7-19) (0) | 2021.05.15 |
[토비의 스프링 - Vol.1]7.2.1 xml 파일 매핑 - JAXB 관련 실습 중 나온 현상 (0) | 2021.04.29 |
[토비의 스프링 - Vol.1] @Transactional (0) | 2021.04.24 |
[토비의 스프링 - Vol.1] xml 트랜잭션 설정 방법 (0) | 2021.04.20 |