능글맞은 구렁이
Spring-Transaction(트랜잭션) 본문
1.트랜잭션이란?
비즈니스로직을 수행할 경우, 일정부분까지 수행한후,오류가발생시, 현재까지의 모든 수행 내용을 처음으로
되돌리는 기능 (마치 오라클의 rollback과 commit과 같은 기능이다.)
2. 스프링 트랜잭션 처리
1) AOP필요
2) applicationContext.xml에 트랜잭션관련 tx 네임스페이스 필요
(xmlns:tx="http://www.springframework.org/schema/tx")
3) 반드시 xml기반으로 설정(annotation설정불가능)
4) <aop:advisor~~></aop:advisor>를 이용하여 설정.(<aop:aspect> 사용 불가)
3. 트랜잭션 등록
1) 어떻게 연동되는 지에 따라 트랜잭션 관리 클래스는 변경된다.
( 현재 사용하고 있는 연동 방식은 DataSource를 이용하기 때문에 스프링이 제공하는:
org.springframework.jdbc.datasource.DataSourceTransactionManager를 사용)
2) 등록방법:<bean id="객체명" class="트랜잭션관리자클래스">를 이용하여 등록한다.
다만, 데이터베이스 접속이 필요하기 때문에 내부에
<property name="dataSource" ref="미리등록한DataSource 객체id">태그를 이용하여 어떤 접속방식을
이용하는지를 전달한다.
<!-- Transaction Registration -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
※트랜잭션 처리를 위한 환경설정※
주의사항 : 스프링 트랜잭션에 관한 Advice 클래스는 개발자가 정의하여 생성하는 것이 아닌, 스프링 컨테이너가
<tx:advice>에 설정된 내용을 토대로 자동 설정한다. 즉, <tx:advice id="txAdvice">와 같이 설정한다. 따라서 개발자는 어떤 클래스를 이용하여 advice 객체가 만들어지고, 그 내부에 어떤 메서드가 존재하는지 알 수 없다. 다만, 생성된 객체id 인 txAdvice를이용하여 이 advice에 어떤 트랜잭션관리객체를 지정할 지만 가능하다.(</tx:advice id="txadvice" transaction-manager="txmanager">)
따라서, txAdvice라는 어드바이스 객체가 위에 미리 등록한 "txManager"를 이용하여 트랜잭션을 관리한다.
3) 트랜잭션을 적용할 메서드 지정
ㄱ) <tx:method~~>의 속성 </tx:method~~>
a) name="트랜잭션 적용 메서드 지정"
b) read-only="true"읽기 전용 여부 지정(기본값은 false로 true로 설정시 해당 메서드는
트랜잭션 관리 대상에서 제외된다.)
c) no-rollback-for="트랜잭션을 롤백하지 않을 예외 지정"
b) rollbac-for="트랜잭션을 롤백할 에외 지정"
<!-- Transaction Configuration -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<!-- get으로 시작하는 모든 메서드는 실제로 데이터를
수정/삭제/추가하는 메서드가 아닌 단순 조회메서드 이므로
read-only="ture"을 설정함으로써 트랜잭션에서 제외 시킬수 있다. -->
<tx:method name="get*" read-only="true"/>
<!--따라서 그외의 모든 메서드는 트랜잭션 관리 대상으로 지정된다.-->
<tx:method name="*"/><!--모드 메서드를 트랙잭션관리대상으로 설정-->
</tx:attributes>
</tx:advice>
'Framework > Spring' 카테고리의 다른 글
Spring-MVC (0) | 2021.06.23 |
---|---|
Spring-어노테이션 기반 MVC개발 (0) | 2021.06.23 |
Spring-JDBC(Oracle) (0) | 2021.06.22 |
Spring-AOP(어노테이션 기반) (0) | 2021.06.22 |
Spring-AOP(XML 기반) (0) | 2021.06.22 |