2012-04-15 2 views
4

나는 Hibernat 4 기반의 멀티 테넌트 애플리케이션을 개발 중이다. 별도의 데이터베이스 솔루션을 사용한다. 데이터베이스 공급자로 MySQL을 사용합니다. 새로운 세입자마다 mysql에 새 데이터베이스를 추가합니다. appserver를 다시 시작하지 않고 내 응용 프로그램에 새 테넌트를 추가하고 싶습니다. DriverManagerDataSource를 사용하여 각 테넌트에 대해 새로운 데이터 소스를 만들지 만이 클래스는 프로덕션 환경에서 사용하지 않으려 고합니다. 어떤 수업을 사용해야합니까? appserver에 데이터 소스를 추가하고 JNDIdatasource를 사용하려고 생각했지만 문제는 각 새 테넌트에 대해 appserver를 다시 시작해야한다는 것입니다. appserver를 다시 시작하지 않고 데이터 소스를 추가 할 수있는 방법이 있습니까?멀티 테넌트 애플리케이션 용 데이터 소스

+1

아마도 다음과 같이 도움이 될 것입니다 : http://blog.springsource.org/2007/01/23/dynamic -datasource-routing/ –

+0

일반적으로 좋은 디자인이 아닙니다. 새로운 사용자/임차인 등 각각에 대해 데이터베이스를 작성하십시오. 파티셔닝과 함께 단일 데이터베이스 사용에 대해 생각해보십시오. http://dev.mysql.com/doc/refman/5.1/en/partitioning-overview.html – samlewis

답변

2

질문에 대한 직접적인 대답을 얻으려면 JMX를 통해 응용 프로그램 컨텍스트를 노출하고 프로그래밍 방식으로 수정할 수 있습니다. 이 문제는 변경 사항이 일시적 일 수 있습니다. 즉, 서버를 다시 시작하면 변경 사항이 유지되지 않습니다.

또 다른 옵션은 프로그래밍 방식으로 기본 xml 파일을 수정하고 (xml을 사용한다고 가정) 응용 프로그램 컨텍스트에서 refresh()을 호출하는 것입니다. 예를 들어, 당신은 데이터 소스에 대한 자리 표시와 속도 템플릿을 만들 수 있습니다

<beans> 
... 
#foreach ($datasource in $datasources) 
    $datasource 
#end 
... 
</beans> 

는 그런 다음 업데이트 된 데이터 소스-의 context.xml을 생성 할 속도에 모든 필요한 데이터 소스의 목록을 통과 할 것

그러나 다른 사용자들이 지적했듯이 실제로는 좋은 생각이 아니므로 파티셔닝이나 다른 접근법을 사용하는 것이 더 좋습니다

관련 문제