트렌젝션 관련 질문입니다
- 작성자 :
- 배*윤
- 작성일 :
- 2015-11-13 11:38:27
- 조회수 :
- 1,134
- 구분 :
- 개발환경
- 진행상태 :
- 완료
Q
안녕하세요 지금 프로젝트를 진행하고 있는데
A 테이블에 insert 하고 insert 한 결과를 group by 하여 조회한후 B 테이블에 입력하는 로직이 있습니다.
지금 A 테이블에는 insert 되어있는데 입력후 조회시 select할때 해당 데이터가 0건으로 조회됩니다
해당 쿼리를 sqlplus 에서 돌려보면 정상정으로 여러건의 데이터가 보입니다.
트렌젝션 문제인것 같아 트렌젝션 확인을 질문드립니다.
현재 트렌젝션 설정은
<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(* 패키지.*Impl.*(..)) || execution(* 패키지.*Impl.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="requiredTx" />
</aop:config>
이렇게 잡혀있고
DAO 부분에서는
EgovAbstractDAO를 상속받고 있고, selectByPk , list , update 를 사용하고 있습니다.
한개의 트랜젝션으로 묶기위해
SqlMapClient sql = getSqlMapClient();
sql.starttransaction 등을 사용하고
sql.update 로 사용해봤으나 전체적으로 트렌젝션이 적용되지 않는것 같습니다.
해결방안좀 알려주시면 감사하겠습니다.
A 테이블에 insert 하고 insert 한 결과를 group by 하여 조회한후 B 테이블에 입력하는 로직이 있습니다.
지금 A 테이블에는 insert 되어있는데 입력후 조회시 select할때 해당 데이터가 0건으로 조회됩니다
해당 쿼리를 sqlplus 에서 돌려보면 정상정으로 여러건의 데이터가 보입니다.
트렌젝션 문제인것 같아 트렌젝션 확인을 질문드립니다.
현재 트렌젝션 설정은
<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(* 패키지.*Impl.*(..)) || execution(* 패키지.*Impl.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="requiredTx" />
</aop:config>
이렇게 잡혀있고
DAO 부분에서는
EgovAbstractDAO를 상속받고 있고, selectByPk , list , update 를 사용하고 있습니다.
한개의 트랜젝션으로 묶기위해
SqlMapClient sql = getSqlMapClient();
sql.starttransaction 등을 사용하고
sql.update 로 사용해봤으나 전체적으로 트렌젝션이 적용되지 않는것 같습니다.
해결방안좀 알려주시면 감사하겠습니다.
A
배도윤님, 안녕하세요.
트랜잭션 설정이 어떻게 되어있는지, insert 로직을 어떻게 구성하셨는지 알 수 없어 자세하게 안내는 어렵습니다만,
트랜잭션 설정이 프레임워크 기본 설정으로 되어있다면, 서비스 구현체에 걸리게 되어있습니다.
말씀하신대로 서비스단에서 insert 후 곧바로 select + Insert를 하기 때문에 트랜잭션이 원하시는대로 처리가 안되는 것으로 생각됩니다.
트랜잭션 설정이나 그 외의 동작이 정상이라는 전제 하에, A테이블에 insert하는 로직과, insert한 겨로가를 group by 하여 B테이블에 입력하는 로직을 컨트롤러에서 분리하여 각각 트랜잭션이 걸리도록 하시면 가장 간편하지 않을까 생각됩니다.
혹시, 트랜잭션의 다른 부분에는 문제가 없는지 확인이 필요할 것으로 보입니다.
감사합니다.
트랜잭션 설정이 어떻게 되어있는지, insert 로직을 어떻게 구성하셨는지 알 수 없어 자세하게 안내는 어렵습니다만,
트랜잭션 설정이 프레임워크 기본 설정으로 되어있다면, 서비스 구현체에 걸리게 되어있습니다.
말씀하신대로 서비스단에서 insert 후 곧바로 select + Insert를 하기 때문에 트랜잭션이 원하시는대로 처리가 안되는 것으로 생각됩니다.
트랜잭션 설정이나 그 외의 동작이 정상이라는 전제 하에, A테이블에 insert하는 로직과, insert한 겨로가를 group by 하여 B테이블에 입력하는 로직을 컨트롤러에서 분리하여 각각 트랜잭션이 걸리도록 하시면 가장 간편하지 않을까 생각됩니다.
혹시, 트랜잭션의 다른 부분에는 문제가 없는지 확인이 필요할 것으로 보입니다.
감사합니다.