我在寫一個支持多用戶的web應用程序。每個用戶都有自己的數據庫 - 使用H2。所有的數據庫模式都是一樣的。多用戶數據源 - Spring +休眠
我希望在這個應用程序中使用Spring + Hibernate。
所以我停留在如何將用戶的數據庫與該用戶聯繫起來 - 春天的AbstractRoutingDataSource也許在HttpSession相關的它,並延長?但不會影響Hibernate的緩存嗎?另一種方法是爲每個數據源分配一個SessionFactory,儘管每個數據源的模式都是一樣的......所以我認爲這是浪費。
不管怎麼說選擇數據源需要是動態的 - 在上下文中的文件不能被預先配置,爲每個新用戶將擁有自己的數據庫中創建。有沒有現有的框架/解決方案?
我不太瞭解Hibernate Shards,也許這有效?
嗨帕斯卡爾,感謝您的回覆。 所有數據庫都具有相同的模式,因此所有這些數據庫的一個SessionFactory都可以。 如果我從2個不同的數據庫加載2個唯一的實體但具有相同的ID,Hibernate有2級緩存,可能包含無效的緩存數據。 我想我可以通過將DataSource與HttpSession關聯,並使用Interceptor將HttpSession中的DataSource附加到ThreadLocal,以便我的AbstractDataSource impl可以獲取正確的事務DS。 – Dzhu 2010-10-04 21:59:11
Ken DeLong文章+1,它爲我節省了一些頭痛:-) – opyate 2011-03-30 21:42:02