@Transaction 어노테이션 설정

처음 @Transactional 어노테이션을 사용할 당시에는 다른분이 설정을 해둔 값을 보지 않고 가져다가 사용만 한 터라…

대충 Service 객체 내에서 여러 CRUD 중 exception 발생한 경우

지금까지 실행한 CRUD 를 모두 rollback 하는 정도로만 알고 사용…

이번에 프로젝트(?)를 설정하면서 무조건 rollback 이 아니라

특정상황에서는 commit 을 해야 되는 경우도 있다는 것을 알게 되었고..

(혼자 상상해보기로는.. log 내역은 에러가 발생해도 남겨야 하니까..?)

삽질한 내역?이 조금 아쉬워서 글로 남김..ㅠ

servlet-context.xml

xml 상단추가
xmlns:tx="http://www.springframework.org/schema/tx"
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd

<!-- @Transaction 어노테이션 설정 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="dataSource"/>
</bean>

 

TestServiceImpl.java

@Transactional
@Override
public JSONObject setCustInfo(HttpServletRequest request) {
	블라블라~
}

@Transactional 에 다양한 옵션 값을 통해 commit, rollback 설정이 가능하며

예외발생한 클래스에 따라 다르게 설정도 가능하다.

 

DB 관련 (dataSource, Mapper 경로 등) context.xml 에 추가하였을 때 작동하지 않았으나..

servlet 관련 설정한 servlet-context.xml 에 설정하니 정상 작동하였다..

아직도 블라블라-context.xml 에 대해 불러오는 방법?

설정되는 순서에 대해 이해가 부족한 것 같다..ㅠ


빠진 부분이 있어서 추가…

servlet-context.xml 에서 추가한 transactionManager에서 proeprty로 사용되는

dataSource 정의

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="dataSource"/>
</bean>

 

web.xml (root path 설정)

<context-param>
	<param-name>webAppRootKey</param-name>
	<param-value>ers.root</param-value>
</context-param>

 

web.xml root-context.xml 정의

<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>

 

root-context.xml
(데이터베이스 속성 관리 파일 정의)

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
	<property name="location" value="/WEB-INF/spring/db.properties"/>
</bean>

 

데이터베이스 접속정보

DB : MSSQL
접속 url : 192.168.0.1
포트 : 1234
DatabaseName : test
접속아이디 : username
접속비밀번호 : password
위와 같을때… 아래와 같이 사용( = 앞부분.. ex : jdbc.driver는 변수로 생각)

jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.url=jdbc:sqlserver://192.168.0.1:1234;databaseName=test
jdbc.username=username
jdbc.password=password

 

다시 root-context.xml 로 와서

mapper 관련 xml 정의

<import resource="mapper-context.xml" />

 

mapper-context.xml

<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"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	<property name="driverClassName" value="${jdbc.driver}" />
	<property name="url" value="${jdbc.url}" />
	<property name="username" value="${jdbc.username}" />
	<property name="password" value="${jdbc.password}" />
</bean>

여기서 정의한 dataSource를 참조..!!

0 글이 마음에 드셨다면 하트 꾸욱~