[트랜잭션]
2021. 10. 8. 18:31ㆍspring
두 개 이상의 쿼리를 모두 성공적으로 실행해야 데이터가 정상적으로 처리되는 경우 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 |