가넷sw
110
2019-08-14 17:06:30
2
202

Spring @Transactional을 적용하여 rollback 동작이 안됩니다. (다시 질문드립니다.)


context-datasource.xml

serviceImpl

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

    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource_oracle"/>
	</bean>
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = { Exception.class })
@Override
public void insertImg(ImgVO vo, MultipartHttpServletRequest request) throws Exception {		
	// TODO Auto-generated method stub				
			
	...
	
	imgDao.insertImg(vo);
	vo.setTitle("");//에러발생 유도(필수값 입력 하지 않음)
	imgDao.insertImg(vo);
						
}


안녕하세요.
Spring @Transactional 어노테이션을 써서 Rollback을 진행하고자 하는데 잘 안되고 있어서 문의를 드립니다.



2건의 insert문이 있다고 가정했을 때
첫번째 건은 성공, 두번째 건은 실패하였다면 2건 모두 rollback되어야 하는데 위의 코드로는 진행되지 않아 문의 드립니다.



잘못된 점이 있으면 말씀해주시면 감사드리겠습니다.


0
0
  • 답변 2

  • 포포핀
    533
    2019-08-14 17:40:22

    spring reference에 다음과 같은 내용이 있네요

    @EnableTransactionManagement and <tx:annotation-driven/> looks for @Transactional only on beans in the same application context in which they are defined. This means that, if you put annotation-driven configuration in a WebApplicationContext for a DispatcherServlet, it checks for @Transactional beans only in your controllers and not your services. 


    transaction을 적용할 bean이 있는 application context로 <tx:annotation-driven> 설정을 옮겨보세요

    0
  • 가넷sw
    110
    2019-08-16 07:33:38

    @포포핀


    @Transactional 어노테이션을 Controller에 사용하고

    <tx:driven>-annotation>설정을 dispatcherServlet으로 변경해보라는 말씀이신거죠?



    적용을 해보았는데 여전히 첫번째 insert의 rollback이 동작하지 않습니다.


    혹 @transactional을 사용하지 않고 rollback을 적용할 수 있는 방법이 있는지 아시는 분들 알려주십시오.

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.