DB접속정보(DataSource), 다이나믹하게 변경 방법?
- 작성자 :
- 최*호
- 작성일 :
- 2015-03-03 17:26:34
- 조회수 :
- 2,333
- 구분 :
- 기타
- 진행상태 :
- 완료
Q
스프링프레임웍 기반으로 웹어플리케이션 작업하고 있습니다.
WebContent/properties/devdb.properties에 아래와 같은 DB정보를 설정하고 있습니다.
------------ devdb.properties -----------
## Dev DB
jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@192.168.0.100:1521:ora
jdbc.username=db_user1
jdbc.password=db_pass1
-----------------------------------------
이렇게 설정하고, 컨트롤러에서 서비스를 호출하게 되면,
transaction 이 시작되고,
위의 DB설정 정보를 이용해서, JDBC connection정보들이 세팅됩니다.
그리고는 DAO 단에서
iBATIS 처리를 위해 SqlMapSession 을 오픈하고,
JDBC Connection 취득하여, 쿼리문을 실행하게 됩니다.
DAO 처리가 끝나면,
서비스에서 transaction을 커밋하고, JDBC Connection 을 DataSource 리턴합니다.
이러한 처리과정에 관련해서 질문이 있습니다.
devdb.properties 에 설정된 DB접속정보를,
어플리케이션이서, 다이나믹하게 변경할 수 있을까요?
즉, 새로운 서비스를 호출하기 전에, 기본적으로 사용하는 DB접속정보를 변경하려면 어떻게 해야 할까요?
(똑같은 DB 스키마가, 여러개의 DBuser(db_user1~db_user9)로 나누어져 있는 환경입니다)
같은 시점에 여러개의 DBuser에 접속하게 되지는 않고,
웹화면에서, 어느 DB접속정보를 사용할지 정보를 취득해서, 해당 DBuser로 접속해서,
필요한 쿼리를 해와야 하는 상황입니다.
어떻게 하면,
다이나믹하게, 원하는 DBuser에 접속해서, 거기에 있는 정보를 가져오도록 할 수 있을까요?
선택적으로 접속해야할 DBuser가 10개 이상됩니다.
해당 DB접속정보 리스트에서 선택해서 해당 DBuser로 접속해서 작업을 할 수 있도록 해야 합니다.
어떤 방법이 있을까요?
스프링에 맡기고 있은 DataSource관리를 가져와서 직접 컨트롤 할 수 밖에 없는 것일까요?
이렇게 되면 작업이 너무 커질 것같고, 좀 간단하면서 쉽게 처리할 수 있는 방법이 없을까요?
만일, 다른 방법이 없다면, 스프링의 소스를 구해서, 어떤 부분을 수정하면 되겠다는 조언이라도 부탁합니다
WebContent/properties/devdb.properties에 아래와 같은 DB정보를 설정하고 있습니다.
------------ devdb.properties -----------
## Dev DB
jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@192.168.0.100:1521:ora
jdbc.username=db_user1
jdbc.password=db_pass1
-----------------------------------------
이렇게 설정하고, 컨트롤러에서 서비스를 호출하게 되면,
transaction 이 시작되고,
위의 DB설정 정보를 이용해서, JDBC connection정보들이 세팅됩니다.
그리고는 DAO 단에서
iBATIS 처리를 위해 SqlMapSession 을 오픈하고,
JDBC Connection 취득하여, 쿼리문을 실행하게 됩니다.
DAO 처리가 끝나면,
서비스에서 transaction을 커밋하고, JDBC Connection 을 DataSource 리턴합니다.
이러한 처리과정에 관련해서 질문이 있습니다.
devdb.properties 에 설정된 DB접속정보를,
어플리케이션이서, 다이나믹하게 변경할 수 있을까요?
즉, 새로운 서비스를 호출하기 전에, 기본적으로 사용하는 DB접속정보를 변경하려면 어떻게 해야 할까요?
(똑같은 DB 스키마가, 여러개의 DBuser(db_user1~db_user9)로 나누어져 있는 환경입니다)
같은 시점에 여러개의 DBuser에 접속하게 되지는 않고,
웹화면에서, 어느 DB접속정보를 사용할지 정보를 취득해서, 해당 DBuser로 접속해서,
필요한 쿼리를 해와야 하는 상황입니다.
어떻게 하면,
다이나믹하게, 원하는 DBuser에 접속해서, 거기에 있는 정보를 가져오도록 할 수 있을까요?
선택적으로 접속해야할 DBuser가 10개 이상됩니다.
해당 DB접속정보 리스트에서 선택해서 해당 DBuser로 접속해서 작업을 할 수 있도록 해야 합니다.
어떤 방법이 있을까요?
스프링에 맡기고 있은 DataSource관리를 가져와서 직접 컨트롤 할 수 밖에 없는 것일까요?
이렇게 되면 작업이 너무 커질 것같고, 좀 간단하면서 쉽게 처리할 수 있는 방법이 없을까요?
만일, 다른 방법이 없다면, 스프링의 소스를 구해서, 어떤 부분을 수정하면 되겠다는 조언이라도 부탁합니다
A
안녕하세요. 최기호님.
외부 블로그 중에 관련하여 포스팅된 부분이 있어 안내해 드립니다.
AbstractRoutingDataSource를 활용하여 MyBatis에 적용가능한 방법 입니다.
도움이 되셨으면 합니다.
http://sidnancy.kr/spring-mybatis-eseo-yeoreo-gaeyi-datasource-routing-haneun-bangbeob
http://spring.io/blog/2007/01/23/dynamic-datasource-routing/
외부 블로그 중에 관련하여 포스팅된 부분이 있어 안내해 드립니다.
AbstractRoutingDataSource를 활용하여 MyBatis에 적용가능한 방법 입니다.
도움이 되셨으면 합니다.
http://sidnancy.kr/spring-mybatis-eseo-yeoreo-gaeyi-datasource-routing-haneun-bangbeob
http://spring.io/blog/2007/01/23/dynamic-datasource-routing/