(Spring)다중 DataSource 처리 질문 있습니다.

279 views
Skip to first unread message

fabric

unread,
Mar 15, 2021, 3:21:52 AM3/15/21
to Korea Spring User Group Q&A

해당 소스는 :  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 버전 

1.png

 

============================================================================================== 

 

이렇게 결과가 발생되었습니다. 

 

member에 insert 된것은 commit 되어야 하고

당연 LogicService에 @Transactional (boardTxManager) 설정했으니깐 rollback이 안되고!! commit 됩니다!!

board에 insert 된것은 rollback이 되지 않았습니다.

 

왜 둘다 commit이 된건가요?

 

반대로 

 

============================================================================================== 

LogicService (@Transactional (memberTxManager)) -> memberService -> boardServie 를 실행해서

 

boardServie 에 INSERT 하고 바로 Exception을 발생시켰습니다.

 

Mybatis 버전

2.png 

============================================================================================== 

이렇게 ChainedTransactionManager, JtaTransactionManager 이용하지 않았는데 둘다 rollback 되었습니다....

 무엇일까요? 혹시 spring이 업그레이드 되면서 자동으로 ChainedTransactionManager 해주는걸까요? 


이유를 잘모르겠습니다...

JPA로 이용하면 정상적으로 다음과 같은 결과가 나왔습니다....  즉 


============================================================================================== 

LogicService (@Transactional (memberTxManager))  로 셋팅하면  

 

JPA 버전

3.png 

LogicService (@Transactional (boardTxManager))  로 셋팅하면 

 

JPA 버전

4.png 

==============================================================================================

 

참고로 해당 DataSource Config는


1. /src/main/java/com/transaction/config/database/MainHikariSchemaDataSourceConfig.java

2. /src/main/java/com/transaction/config/database/SubHikariSchemaDataSourceConfig.java

 

여기에 있습니다.


마지막으로 긴글 읽어주셔서 정말 감사합니다!

좋은 하루 보내세요!!

Reply all
Reply to author
Forward
0 new messages