我在写一个支持多用户的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