Spring
[Spring] 스프링 AOP를 이용해 트랜잭션(transaction) 처리하기
dev.mk
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이 된다.
반응형