Adventure Time - Finn 3
본문 바로가기
Spring

트랜잭션

by hyun9_9 2024. 3. 16.

외부에서 클래스를 받아오는 것이라 xml를 사용

 

.xml 설정으로 걸고 사용을 하는것이 보편적이다

.xml(설정파일) 에서 트랜젝션을 사용하기 위해선 추가해야할 두 가지가 있다

 

xmlns:tx="http://www.springframework.org/schema/tx"
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd

 

 

트랜잭션 사용

트랜잭션 설정해주는 것은 DataSourceTransactionManager id="txManager"로 많이 사용한다

->setter주입을 필요로한다 -> dbcp 주입

 

 

->공통로직 (어드바이스)로 봄

 

어드바이스 등록

 


모든 트랜젝션 처리
<tx:method name="*" />


name="select*" 은 트랜잭션이 필요없어서 read-only="true"를 추가해 별도로 걸어두지 않음

<tx:method name="select*" read-only="true" />

 

결합

advice xxxx
advisor(설정) ==aspect(개발자)==위빙처리해달라==결합

<aop:pointcut id="aPointcut" expression="execution(* cohttp://m.spring.biz..*Impl.*(..))" />
<aop:advisor pointcut-ref="aPointcut" advice-ref="txAdvice" />
pointcut 위빙 처리 (결합 해달라)


결합 완료!

 

 

실제 사용해보기

 

회원가입을 만듬

 

db 확인

 


insert를 두번했을 때 

mid는 유일해야하기에 두번째 insert에서 실패할 것이다

트랜잭션이 없다면 첫번째 insert는 삽입이되고

두번째 insert는 삽입에 실패 할 것 이다

 

하지만 트랜잭션으로 인해

하나의 기본 단위 내에서 오류가 발생했기 때문에 비즈니스 메서드를 수행하기 이전을 돌아간다 (insert 하기전)

 

실행해보면

실패한 것을 확인할 수 있고

 

 

db에도 안올라 간 것을 확인 할 수 있다

 

 

결과


비즈니스 메서드에서 1개라도 실패했네?
메서드 실행 전으로 롤백!
커밋을 안함

 

 

 

'Spring' 카테고리의 다른 글

SpringMVC 구조 개념  (0) 2024.03.18
DispatcherServlet 모음  (0) 2024.03.17
DAO var.2 사용  (1) 2024.03.15
DAO var.1 -> DAO var.2 설정  (0) 2024.03.14
@어노테이션을 이용한 AOP  (1) 2024.03.12