- (Spring)다중 DataSource 처리 질문 있습니다. - 업데이트 1개
fabric <syh...@gmail.com>: Mar 15 12:21AM -0700
해당 소스는 : https://github.com/syh8088/spring-multi-transaction
블로그 소개 :
https://syh8088.github.io/2021/03/14/JAVA/Transaction/Multi-Transaction/
다중 스키마를 이용하고 Mybatis + JPA 기능을 추가 해보았습니다.
결과가 원하는 대로 안나와서 문제가 발생되더군요.
ChainedTransactionManager, JtaTransactionManager 이용하기전에 일반적으로 각각 독립만
TransactionManager로 생성한 것을
Mybatis로 테스트 해보았는데요
즉 LogicService에 @Transactional이 있는 경우(memberTxManager)
그러니깐
=======================================================================================
LogicService (@Transactional (boardTxManager)) -> memberService ->
boardServie 를 실행해서
boardServie 에 INSERT 하고 바로 Exception을 발생시켰습니다.
그럼 결과는
Mybatis 버전
[image: 1.png]
==============================================================================================
이렇게 결과가 발생되었습니다.
member에 insert 된것은 commit 되어야 하고
당연 LogicService에 @Transactional (boardTxManager) 설정했으니깐 rollback이
안되고!! commit 됩니다!!
*board에 insert 된것은 rollback이 되지 않았습니다*.
왜 둘다 commit이 된건가요?
반대로
==============================================================================================
LogicService (@Transactional (memberTxManager)) -> memberService ->
boardServie 를 실행해서
boardServie 에 INSERT 하고 바로 Exception을 발생시켰습니다.
Mybatis 버전
[image: 2.png]
==============================================================================================
이렇게 ChainedTransactionManager, JtaTransactionManager 이용하지 않았는데 둘다 rollback
되었습니다....
무엇일까요? 혹시 spring이 업그레이드 되면서 자동으로 ChainedTransactionManager 해주는걸까요?
이유를 잘모르겠습니다...
또 *JPA로 이용하면 정상적으로* 다음과 같은 결과가 나왔습니다.... 즉
==============================================================================================
LogicService (@Transactional (memberTxManager)) 로 셋팅하면
JPA 버전
[image: 3.png]
LogicService (@Transactional (boardTxManager)) 로 셋팅하면
JPA 버전
[image: 4.png]
==============================================================================================
참고로 해당 DataSource Config는
1.
/src/main/java/com/transaction/config/database/MainHikariSchemaDataSourceConfig.java
2.
/src/main/java/com/transaction/config/database/SubHikariSchemaDataSourceConfig.java
여기에 있습니다.
마지막으로 긴글 읽어주셔서 정말 감사합니다!
좋은 하루 보내세요!!
이 그룹에 대한 업데이트를 구독한 사용자에게 전송되는 다이제스트입니다. 그룹 회원 정보 페이지에서 설정을 변경할 수 있습니다.
이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 ksug+uns...@googlegroups.com에 이메일을 보내세요.