처음 @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 글이 마음에 드셨다면 하트 꾸욱~