2009-12-10 5 views
0

제가 일하고있는 곳에서 우리는 쿼리 할 수있는 데이터베이스가 여러 개 있습니다. 그 중 일부는 미리 정의되어 있으며 데이터 소스를 사용하여 액세스하고 있습니다. 다른 이름은 고객 ID #의 이름을 따서 지정됩니다. 예를 들어 _2. 우리는 수백 명의 고객을 보유하고 있으며 일부 고객은 다른 고객으로 참여할 수 있으며 그 당시 인터페이스를 사용하는 고객에 따라 특정 데이터를 위해 특정 데이터베이스에 연결해야합니다.Grails 동적 데이터베이스 연결?

Grails에서는 불가능하다고 읽었지만 전혀 할 방법이 없다고 생각합니다. 이 같은 동적 연결을 허용하는 최대 절전 모드 플러그인 또는 쓰레기를 작성하는 몇 가지 가능한 방법이 있습니까? 아무도이 문제를 아직 접하지 못했지만이를 처리하기 위해 무엇을 했습니까?

모든 정보가 도움이 될 것입니다. 우리는이 미친 데이터베이스 디자인으로 인해 우리의 개발로 막 다른 골목에 섰습니다!

+0

당신의 질문에 대한 답을 모르겠다. (나는 컴파일 타임에 정의 된 것처럼 최대 절전 모드에서는 불가능하다고 느낀다.)하지만 그것은 신이 꺼져있다. 행운을 빌어 요 – Jay

답변

2

DataSources Plugin이 도움이 될 수 있습니다. 당신이 이것을 어떻게 파헤 치고 싶은지 확실하지 않지만, 당신이 달성하기를 원하는 단계에 확실히 근접 할 수 있습니다.

1

나는 약간의 구현 아이디어, 그것이 가능하다고 생각 : 나는 데이터 소스 플러그인 + 사용자 정의 데이터 소스 클래스를 사용하십시오

. DataSources Plugin을 사용하여 master 데이터베이스와 고객 별 데이터베이스를 가리키는 도메인 클래스를 분리 할 수 ​​있습니다.

고객 데이터베이스로 라우팅하기 위해 고유 한 DataSource 클래스를 만들 수 있습니다. 맞춤 클래스를 org.springframework.jdbc.datasource.DelegatingDataSource에서 확장하는 것이 좋습니다. 사용자 정의 DataSource가 사용할 대상 DataSource를 결정합니다. 데이터 소스 풀을 만들어야합니다. 여러분은 pool을 구현하기 위해 commons.apache.org/pool/를 사용할 수 있습니다. 데이터 소스 풀은 일부 비활성 시간 후에 데이터 소스 (연결 풀)를 닫을 수 있습니다.

ThreadLocal을 사용하여 어떤 고객이 로그인했는지 "풀의 데이터 소스"풀에 알리고 그 정보를 사용하여 올바른 대상 데이터 소스를 선택 (즉석에서 작성) 할 수 있습니다.

특정 Hibernate 캐시 구현을 구현하지 않는 한 (데이터 소스와 동일한 "라우팅 아이디어"를 사용하여 가능해야 함) 고객 별 클래스에 대한 모든 Hibernate 캐싱을 해제해야합니다.

resources.groovy의 기본 데이터 소스 bean을 사용자 정의 버전으로 대체 할 수 있습니다. DataSource Plugin faq (grails.org/plugin/datasources#faqTab)을 참조하십시오.

데이터 소스/데이터베이스 풀 구현으로 Tomcat JDBC Pool (JDBC-Pool Grails 플러그인 : grails.org/plugin/jdbc-pool)을 권하고 싶습니다. BoneCP (jolbox.com/)는 유망 해 보였지만 테스트하지 않았습니다.

+0

다른 답변 : http://stackoverflow.com/a/5429546/166062 –