-
[Spring] 스프링 AOP를 이용해 트랜잭션(transaction) 처리하기Spring 2022. 6. 27. 16:53반응형
필자의 스프링 버전
<properties> <java-version>1.8</java-version> <org.springframework-version>4.3.4.RELEASE</org.springframework-version> <spring.security.version>4.2.3.RELEASE</spring.security.version> <org.aspectj-version>1.6.10</org.aspectj-version> <org.slf4j-version>1.6.6</org.slf4j-version> <org.apache.tiles-version>3.0.8</org.apache.tiles-version> </properties>
pom.xml 의존성 추가
<!-- AOP lib --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${org.springframework-version}</version> </dependency> <!-- 트랜잭션 처리 lib --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${org.springframework-version}</version> </dependency>
aop와 트랜잭션을 사용하기 위해 pom.xml에 추가한다.
context-transaction.xml 작성
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd"> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="*" rollback-for="Exception"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="requiredTx" expression="execution(* com.spring.app..service..*ServiceImpl.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="requiredTx"/> </aop:config> </beans>
aop의 포인트컷 설정으로 ServiceImpl.java로 끝나는 자바파일에 트랜잭션을 설정한다.
bean id txManager의 dataSource는 데이터베이스가 연결설정을 하는 context xml파일내의 bean id다.
web.xml 의 contextConfigLocation가 Load할 수 있는 경로에 있어야한다.
ex) <param-value>classpath*:spring/context-*.xml</param-value>
테스트로 TestServiceImpl.java 파일이 트랙잰션의 대상이다.
TestServiceImpl.java 의 내용
@Service public class TestServiceImpl implements TestService { @Autowired TestDao testDao; public void insertTest(TestVo testVo) throws Exception { //트랜잭션 테스트, insertNull로 고의적인 에러를 발생시킨다. 크러면 첫번째 인서트문이 롤백된다. testDao.insertTest(testVo); testDao.insertNull(); } }
insertTest();는 정상적인 인서트문이고
insertNull();는 고의적으로 에러를 발생하는 인서트문이다.
insertTest 메소드를 실행시 Exception발생으로 트랜잭션이 걸리고 Rollback이 된다.
반응형'Spring' 카테고리의 다른 글
스프링 게시판 - ckeditor4 (ck에디터)연동 - 기본적용 (1) (0) 2023.03.18 [파일업로드] 이미지 업로드시 엑박오류, 이상한 경로에 C:\...(생략)\.metadata\.plugins\ 저장된다면? (0) 2023.03.05 [스프링] Spring Controller 컨트롤러 Ajax 데이터통신 유형 정리 (2) 2022.02.28 Spring 스프링 pom.xml 오류해결 cvc-elt.1.a: Cannot find the declaration of element 'project' (4) 2022.02.12 Spring REST API 정의와 설계 규칙 (0) 2020.08.31