[트랜잭션]

2021. 10. 8. 18:31spring

두 개 이상의 쿼리를 모두 성공적으로 실행해야 데이터가 정상적으로 처리되는 경우 DBMS는 트랜잭션을 이용해서 두 개 이상의 쿼리를 마치 한 개의 쿼리처럼 처리한다.

트랜잭션을 커밋하면 모든 쿼리를 실제 데이터에 반영, 트랜잭션을 커밋하기 전에 에러가 발생하면 쿼리 결과를 실제 데이터에 반영하지 않고 취소(롤백)

 

1. 네임스페이스 등록 

 

2. 트랜잭션 관리자 등록

<!-- 트랙잭션 관리자 클래스 DataSourceTransactionManager를 <bean> 등록 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="dataSource"></property>
</bean>

 

3. 트랜잭션 어드바이스 설정

엘리먼트로 트랜잭션을 지정할 메소드를 지정한다. get으로 시작하는 모든 메소드는 읽기전용(read-only=true)으로 처리되어 트랜잭션 관리대상에서 제외하고 나머지 메소드들은 트랜잭션 대상에 포함한다.

<!-- 트랜잭션 어드바이스 설정 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
	<tx:attributes>
		<tx:method name = "get*" read-only="true" />
		<tx:method name="*" />
	</tx:attributes>
</tx:advice>

<tx:method> 엘리먼트가 가질 수 있는 속성

-name 트랜잭션이 적용될 메소드 이름 지정

-read-only 읽기전용 여부 지정(기본값 false)

-no-rollback-for 트랜잭션을 롤백하지 않을 예외 지정

-rollback-for 트랜잭션을 롤백할 예외 지정

 

 

4. AOP 설정을 통한 트랜잭션 적용

<!-- AOP 설정을 통한 트랜잭션 적용 -->
<aop:config>
	<aop:pointcut id="txPointcut" expression="execution(* com.springbook.biz..*(..))" />
	<aop:advisor pointcut-ref="txPointcut" advice-ref="txAdvice"/>
</aop:config>

 

 

'spring' 카테고리의 다른 글

[mybatis] xml 파일에 쿼리문 작성  (0) 2021.11.12
[mybatis] 기본설정  (0) 2021.11.12
[스프링JDBC]  (0) 2021.10.08
[AOP] 어노테이션 기반  (0) 2021.10.08
[AOP] xml 기반  (0) 2021.10.07