配置Hibernate以使用数据库,其名称在运行时之前是未知的

时间:2011-02-17 10:32:41

标签: java hibernate spring dynamic datasource

我有一个在Java 6,Spring 2.5.6和Hibernate 3.2.7上运行的Web应用程序。现在需要从几个数据库中获取一些数据,这些数据库的名称在运行时之前是未知的。实现这一目标的最佳方法是什么?

我看过,例如在http://blog.springsource.com/2007/01/23/dynamic-datasource-routing/的文章中,但这似乎只适用于事先知道所有数据库配置的情况。

3 个答案:

答案 0 :(得分:2)

您可以在Java代码中进行配置,因此您可以在运行时进行配置:

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

答案 1 :(得分:2)

您可以创建一个实现org.hibernate.connection.ConnectionProvider的类。然后在你的hibernate配置文件中添加如下所示的类:

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

您可能也想为每个数据库使用不同的sessionFactory。您能否提供有关应用程序在运行时如何发现数据库连接的更多信息?

答案 2 :(得分:2)

由于每个数据库的数据库结构相同(尽管事先不知道它们的名称),但我决定通过将数据库名称作为参数添加到查询中来强制它。这避免了使用多个会话工厂时的资源和管理问题。

此处提供更多信息:http://web.archive.org/web/20071011173719/http://hibernate.org/429.html