2011-02-17 3 views
5

Java 6, Spring 2.5.6 및 Hibernate 3.2.7에서 실행되는 웹 애플리케이션이 있습니다. 이제 런타임 전에 이름이 알려지지 않은 여러 데이터베이스에서 일부 데이터를 가져와야한다는 요구 사항이 있습니다. 이것을 달성하는 가장 좋은 방법은 무엇입니까?데이터베이스를 사용하기 위해 Hibernate를 설정 (런타임 전에 이름이 알려지지 않음)

나는 예를 들어 보았다. 이 기사는 http://blog.springsource.com/2007/01/23/dynamic-datasource-routing/에 있지만 모든 데이터베이스 구성을 미리 알고있는 경우에만 적용 할 수 있습니다. 런타임에 그것을 할 수 있도록

답변

2

각 데이터베이스에 대한 데이터베이스 구조가 동일하므로 (이름을 미리 알 수는 없지만) 매개 변수로 쿼리에 데이터베이스 이름을 추가하기 만하면됩니다. 이렇게하면 자원 및 관리 문제점이 다중 세션 팩토리를 사용하지 않아도됩니다. 여기에서

더 자세한 정보는 : 나는 구성 개체에 대한 데이터 소스를 설정할 수 있습니다처럼 http://web.archive.org/web/20071011173719/http://hibernate.org/429.html

2

당신은 자바 코드에서 구성 작업을 수행 할 수 있습니다

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/session-configuration.html#configuration-programmatic

+0

보인다, 그러나 이것은 여전히 ​​가능한 모든 데이터 소스에 다시 도착하는 아마 응용 프로그램이 시작되기 전에 정의 (또는되어 있어야합니다 원래의 질문). – simon

+0

언제 어디서나 구성을 만들 수 있습니다. 그러나 당신이 그들을 사용할 필요가있을 때 당신은 또한 그 중 하나를 선택하도록 관리 할 수 ​​있어야합니다. –

2

당신은 org.hibernate.connection.ConnectionProvider를 구현하는 클래스를 만들 수 있습니다. 그런 다음 하이버 네이트 설정 파일에서 다음과 같이 해당 클래스를 추가하십시오.

<property name="hibernate.connection.provider_class">my.class.that.implements.ConnectionProvider</property> 

각 데이터베이스마다 다른 sessionFactory가 필요할 수도 있습니다. 런타임에 데이터베이스 연결에 대해 앱이 어떻게 찾았는지에 대한 정보를 더 제공 할 수 있습니까?

+0

Quality Center 사이트 관리 데이터베이스에 연결하는 방법입니다. 각 Quality Center 프로젝트에는 테이블에서 읽은 이름을 가진 자체 데이터베이스가 있습니다. 각 데이터베이스의 스키마는 알려져 있지만 QC 이름 관리 데이터베이스에서 정보를 가져 오기 전까지는 데이터베이스 이름 만 알 수 없습니다. – simon

+0

각 연결마다 고유 한 sessionFactory가 필요합니다. 응용 프로그램 시작시 또는 필요할 때이 작업을 수행 할 수 있습니다. 이를 수행하기 위해 프로그래밍 방식 구성과 구성 기반 구성을 함께 사용할 수 있습니다. 예를 들어 db 연결을 제외하고 필요한 모든 것을 가진 구성 파일을 생성하십시오. 그런 다음 : config.configure ("hibernate.cfg.xml"). setProperty ("dbstuff", "dbvalue") – Heathen

+0

@simon 또 다른 방법은 직접 연결을 만드는 것입니다. 그런 다음 단일 세션 팩토리를 사용합니다. sessionFactory.openSession (connection); 이 방법을 사용하면 두 번째 수준 캐시가 비활성화되므로 Javadocs에서는 connectionProvider를 대신 사용하는 것이 좋습니다. – Heathen

관련 문제