我有一個運行在Java 6,Spring 2.5.6和Hibernate 3.2.7上的Web應用程序。現在需要從多個數據庫中獲取一些數據,這些數據庫的名稱在運行時間之前是不知道的。達到此目的的最佳方法是什麼?配置Hibernate使用數據庫,其名稱在運行時不知道
我看過例如進入文章http://blog.springsource.com/2007/01/23/dynamic-datasource-routing/,但似乎只適用於所有數據庫配置事先已知的情況。
我有一個運行在Java 6,Spring 2.5.6和Hibernate 3.2.7上的Web應用程序。現在需要從多個數據庫中獲取一些數據,這些數據庫的名稱在運行時間之前是不知道的。達到此目的的最佳方法是什麼?配置Hibernate使用數據庫,其名稱在運行時不知道
我看過例如進入文章http://blog.springsource.com/2007/01/23/dynamic-datasource-routing/,但似乎只適用於所有數據庫配置事先已知的情況。
由於數據庫結構對於每個數據庫都是相同的(儘管它們的名字事先不知道),我決定簡單地通過將數據庫名稱添加到查詢中作爲參數來阻止它。這避免了使用多個會話工廠的資源和管理問題。
從這裏的更多信息:http://web.archive.org/web/20071011173719/http://hibernate.org/429.html
你可以配置在Java代碼中,這樣你就可以在運行時做到這一點:
你可以創建一個實現org.hibernate.connection.ConnectionProvider
類。然後在你的休眠配置文件中添加這樣的類:
<property name="hibernate.connection.provider_class">my.class.that.implements.ConnectionProvider</property>
您可能還想爲每個數據庫另設一個sessionFactory。你能否提供關於你的應用在運行時如何發現數據庫連接的更多信息?
好像我可以爲配置對象數據源,但仍要求所有可能的數據源的應用程序啓動之前定義(或者沒有,這回來到原來的問題)。 – simon 2011-02-17 11:10:10
您可以隨時創建配置,並可以創建多少個配置。但是,當你需要使用它們時,你也應該能夠設法選擇其中的一個。 – 2011-02-17 11:20:45