(Spring4셋팅 Step6) AOP를 이용한 트랜젝션 설정하기
스프링에선 트랜젝션을 관리하기 위해 여러방법이 있지만,
필자가 사용한 방식 중 가장 편한 방식으로 AOP를 이용한 선언적 트랜젝션을 셋팅을 해보겠다.
이 방식은 서버스에 선언한 메소드명으로 읽기 전용인지, 트랜젝션을 적용할지 정할 수 있다.
먼저 pom.xml 파일에 dependency를 추가하자.
<dependency> |
다음으로 applicationContext.xml파일을 수정해보자.
<?xml version="1.0" encoding="UTF-8"?>
<mvc:annotation-driven/>
<context:component-scan base-package="com.test.web" />
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<aop:config>
<!-- dao 스캔 -->
</beans> |
여기서 중점적으로 보일 부분은 pointcut 부분이다.
<aop:pointcut id="txPointcut" expression="execution(* com.test.web.*.service.*ServiceImpl.*(..))" />
aop를 사용하여 com.test.web.기능명.service 패키지내 기능명ServiceImpl의 모든 메소드에 대해 트랜잭션을 사용하도록 설정할 것이다.
다음으로 아래 부분을 확인해보자.
<tx:method name="*" rollback-for="Exception"/>
이 부분은 모든 메소드에서 Exception이 발생하였을 경우 무조건 롤백 하도록 설정하였다.
그럼 테스트를 해보도록 하자
먼저 정상적으로 데이터가 입력되는지 확인해보자.
브라우저를 이용하여 이전에 만들어 놓았던 회원 가입 화면을 호출한다.
http://localhost/member/insertMemberForm.do
데이터는 임의의 데이터를 입력하도록 한다.
회원 아이디 : hong2
회원명 : 홍길동2
회원패스워드 : 1234
회원주소 : 서울시 종로구
회원 가입을 클릭 후 데이터를 확인해보자
hong2 홍길동2 1234 서울시 종로구 hong 홍길동 1234 서울시 종로구 2 rows selected. |
MB_ID가 hong2라는 데이터가 정상적으로 입력되었음을 확인할 수 있다.
다음으로 소스를 살짝 수정하여 롤백 되는 상황을 살펴 보겠다.
MemberServiceImpl 내 insertMember 메소드의 내용 중
memberDao.insertMember(memberBean); 호출 후 에러를 발생시켜보자.
/** 회원 가입 */ |
그럼 다시 회원 가입 화면에서 이번엔 hong3 이라는 데이터를 입력 후 회원 가입 버튼 클릭
바로 에러 화면이 발생할 것이다.
로그를 확인해보자.
2015/07/17 19:26 INFO (MemberController.java:47) - memberBean.mbId : hong3 |
정상적으로 INSERT 쿼리 로그가 찍힘을 확인할 수 있으며, 다음으로 바로 Excepion이 발생하였다.
디비를 확인해보자
hong2 홍길동2 1234 서울시 종로구 hong 홍길동 1234 서울시 종로구 2 rows selected. |
hong3 이란 데이터는 없고, 기존 데이터만 두건 있다.
이렇게 정상적으로 트랜젝션이 동작하여, 서비스에서 Exception 발생시 롤백되는 것을 확인할 수 있다.
만약 데이터 조회시 hong3 이라는 데이터가 조회된다면, 트랜젝션이 동작하지 않은 것이다.
'프로그래밍 > Java' 카테고리의 다른 글
(Spring4셋팅 Step7) jackson2 추가하기 (0) | 2015.07.18 |
---|---|
(Spring4셋팅 Step5) mybatis 추가하기 (0) | 2015.07.15 |
(Spring4셋팅 Step4) log4j 셋팅 (0) | 2015.07.15 |
(Spring4셋팅 Step3) Sitemesh 추가하기 (0) | 2015.07.14 |
(Spring4셋팅 Step2) 스프링 MVC (0) | 2015.07.08 |