AbstractRoutingDataSource 관련 질문드립니다.

1,037 views
Skip to first unread message

황지환

unread,
Mar 8, 2011, 10:00:22 PM3/8/11
to Korea Spring User Group
안녕하세요?

multiple datasource 처리 관련해서,
제 경험은, 과거에 model 객체의 상위 객체에 target datasource 구분 인자를 둬서, 로직을 구현했는데,
http://blog.springsource.com/2007/01/23/dynamic-datasource-routing/
이런 내용이 있어서 참 고맙게 생각 합니다.

여기서 transaction 처리에 관한 질문을 드립니다.
프로그래밍 트랜잭션 처리를 해야 할 거 같다는 생각인데요,
이럴때 트랜잭션 처리 전략을 어떻게 가져가는게 좋을지 의문입니다.
a db에서는 read 및 처리후, b db에 insert 되는 batch 상황의 설명이 좋을거 같습니다.

아울러 model 객체들의 상위에 어떤 property 를 관리 하는 상속 관계에서,
제 생각엔 is-a 관계가 좀 불명확 한거 같다는 생각인데요,
이에 의견 부탁드립니다.
감사합니다.

우병훈

unread,
Mar 8, 2011, 11:10:50 PM3/8/11
to ks...@googlegroups.com
안녕하세요?
제가 AbstractRoutingDataSource 를 사용해 본 경험에 의하면
동일한 Schema 를 가진 DB 를 최초에 한번 동적으로 셋팅하는 용도로는 더할 나위 없이 훌륭하지만
만약 멀티 DB(주로 동일한 Schema) 에 동시에 access 할 필요성이 있는 경우 사용이 불가능? 합니다.
최초에 한번 맺어진 connection 이 ThreadLocal 에 유지되며 재사용되므로 중간에 abstractRoutingDataSource 용 Flag (마찬가지로 ThreadLocal 에 설정) 를 재설정한다 하더라도 connection 을 다시 맺지 않습니다.
또한 멀티 DB 에 read -> write 하려는 목적이면 당연히 JTA 트랜잭션 요건일 테구요.. (물론 여러 JNDI dataSource 를 abstractRoutingDataSource 로 랩핑하는 것도 가능하지만 위에서 말한 것과 같이 connection 을 새로 맺지 않으므로 중간에 DB 변경은 안되더군요)
결국 dataSource 별로 미리 준비된 persistence service 를 Map 형태로 들고 있다가 Flag 에 따라 동적으로 실행하도록 자체 구현을 하였었습니다. 물론 해당 서비스들은 JTA transaction 으로 설정하였구요.

혹시 더 나은 방법으로 이런 요건의 처리가 가능


2011년 3월 9일 오후 12:00, 황지환 <hjh...@naver.com>님의 말:

--
Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에 게시하려면 ks...@googlegroups.com(으)로 이메일을 보내세요.
그룹에서 탈퇴하려면 ksug+uns...@googlegroups.com로 이메일을 보내주세요.
더 많은 옵션을 보려면 http://groups.google.com/group/ksug?hl=ko에서 그룹을 방문하세요.


박성우

unread,
Jul 15, 2014, 1:13:12 AM7/15/14
to ks...@googlegroups.com
저도 유사한 구성으로 멀티 DB를 사용중인데요. 

"물론 해당 서비스들은 JTA transaction 으로 설정" => 이 부분을 어떤식으로 작업하셨는지 조금 구체적으로 얘기해주실 수 있을까요? 
제 경우에는 AOP 로 ThreadLocal 에 abstractRoutingDataSource 용 Flag 를 설정하는데... 이렇게 하는 경우 2개 이상의 service 를 transaction 으로 묶는 것이 불가능하더라구요. 

좋은 방법이 있나요? 

2011년 3월 9일 수요일 오후 1시 10분 50초 UTC+9, seekEnhancement 님의 말:

전형민

unread,
Jul 15, 2014, 2:59:45 AM7/15/14
to ks...@googlegroups.com

이거 한번 확인해 보시죠..

DataSource 가 2개 이상인 경우 ( 분산 Transction ) 

사용하는데요..

구현은.. DataSource에서 connection을 거져 올때 TransactionManager 에 해당 dataSource를 등록해서..

마지막에 TransactionManager 가 등록된 Connection을 모두 commit 하는 구조 입니다.

RoutingDataSource 코드를 확인해 보지는 않았지만,..

Routing 될 DataSource를 외부에서 주입이 가능하다면.. 적용이 가능할 것입니다.


그럼 도움이 되었기를 바랍니다.



------------------------------------
당신의 과거가 당신을 만든다.


2014년 7월 15일 오후 2:13, 박성우 <xun...@gmail.com>님이 작성:

--
이 메일은 Google 그룹스 'Korea Spring User Group Q&A' 그룹에 가입한 분들에게 전송되는 메시지입니다.
이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 ksug+uns...@googlegroups.com에 이메일을 보내세요.
http://groups.google.com/group/ksug에서 이 그룹을 방문하세요.
웹에서 이 토론을 보려면 https://groups.google.com/d/msgid/ksug/e491219d-5040-40f3-a442-82d19d89ba14%40googlegroups.com을(를) 방문하세요.
더 많은 옵션을 보려면 https://groups.google.com/d/optout을(를) 방문하세요.

Reply all
Reply to author
Forward
0 new messages