외부에서 클래스를 받아오는 것이라 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 |