Re: [KSUG] ksug@googlegroups.com의 알림 이메일 - 1개의 업데이트 - 1개의 주제

56 views
Skip to first unread message

Daniel Hong

unread,
Mar 15, 2021, 5:17:40 AMMar 15
to ks...@googlegroups.com
DataSource 가 다르면 제가 알고있는 바로는 
2PC (Two Phase Commit) 를 사용해야 하는 것으로 알고 있습니다.


2021년 3월 15일 (월) 오후 6:09, <ks...@googlegroups.com>님이 작성:
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에 이메일을 보내세요.
Reply all
Reply to author
Forward
0 new messages