티스토리 뷰
프로젝트를 진행하던중 서비스에서 Exception발생시 해당서비스에서 발생시킨 모든 DB Transaction에대해 rollback 을 처리해야하는 경우가 생겨 알아보았습니다.
Annotation기반 DB Transaction을 처리하기.
step1. db transaction 설정
annotation 기반의 transaction처리를 위한 Transaction Manager를 설정합니다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee.xsd">
<bean id="mssqlDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
<property name="url" value="jdbc:sqlserver://xxx.xxx.xxx.xxx;DatabaseName=XXXX" />
<property name="username" value="rocksea" />
<property name="password" value="xxxxxx" />
<property name="defaultAutoCommit" value="false"/>
<property name="initialSize" value="10"/>
<property name="maxActive" value="20"/>
<property name="maxIdle" value="10"/>
<property name="maxWait" value="20000"/>
<property name="logAbandoned" value="true"/>
<property name="removeAbandoned" value="true"/>
<property name="removeAbandonedTimeout" value="60"/>
<property name="validationQuery" value="SELECT 1" />
<property name="testOnBorrow" value="true" />
<property name="testOnReturn" value="true" />
</bean>
<bean id="mssqlTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="mssqlDataSource"></property>
</bean>
<!-- mssql data source -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="mssqlDataSource" />
<property name="configLocation" value="classpath:db/mybatis-config.xml" />
<property name="mapperLocations" value="classpath:db/sql/mssql/**/*.xml" />
</bean>
<bean id="sqlSessionForMssql" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
<aop:aspectj-autoproxy/>
<tx:annotation-driven transaction-manager="mssqlTransactionManager"/>
</beans>
step2. service transaction 적용
@Service
public class TestService{
@Transactional(rollbackFor={Exception.class, DataIntegrityViolationException.class})
public String testTransaction() throws DataIntegrityViolationException, Exception{
.
.
}
}
속성 |
필수여부 |
디폴트 |
상세설명 |
name |
yes |
|
트랜잭션 속성을 가지는 메소드 이름이 결합되었다. 와일드카드(*)문자는 많은 수의 메소드를 가지고 같은 트랜잭션 속성 셋팅을 결합시키기 위해 사용될수 있다. 예를 들어, 'get*', 'handle*', 'on*Event', 등등. |
propagation |
no |
required |
트랜잭션 위임행위 |
isolation |
no |
default |
트랜잭션 격리 레벨 |
timeout |
no |
-1 |
트랜잭션 타임아웃값(초단위) |
read-only |
no |
false |
이 트랜잭션이 읽기전용인가.? |
rollback-for |
no |
|
롤백을 야기할 콤마로 구분되는 Exception(s). 예를 들어, 'com.foo.MyBusinessException,ServletException' |
no-rollback-for |
no |
|
롤백을 야기하지 않는 콤마로 구분되는 Exception(s). 예를 들어, 'com.foo.MyBusinessException,ServletException' |
일단 Exception Throw할때 모든 서비스 transaction을 rollback 하는 예제를 적용해 보았습니다.
위 속성을 참고해서 Transaction을 상황에 맞게 적용하시면 됩니다.
by rocksea.
'Developer' 카테고리의 다른 글
[samba] 간단 samba 설치 (0) | 2013.02.12 |
---|---|
[spring scheduler ] Spring Scheduler를 이용한 Deamon Processing (0) | 2013.01.31 |
[jQuery] image slider (0) | 2013.01.23 |
[jQuery] event로 화면제어 (0) | 2013.01.23 |
[ SelectKey ] select와 insert 다중처리. (0) | 2013.01.18 |
- Total
- Today
- Yesterday
- 도덕경
- redis
- PostgreSQL
- ubuntu
- 조동사
- 비지니스 영어
- AWS
- Python Django
- 영작
- 해외여행
- k8s
- 여행
- 스페인 여행
- Python
- 베트남
- it
- maven
- mongoDB
- hdfs
- 대명사 구문
- Business English
- memcached
- hadoop
- 가정법
- 다낭
- nodejs
- NGINX
- 영문법
- JBOSS
- 비교구문
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |