I might关于(严格)需要拥有一个的说法是错误的SessionFactory
根据一些资源的建议,每个数据库:
动态数据源路由 http://blog.springsource.com/2007/01/23/dynamic-datasource-routing/
明天我会花一些时间重新阅读所有内容(说实话,我没有得到所有细节)并完全理解这种设置的含义(尽管看起来很明显它会破坏二级缓存) 。我稍后会回来讨论这个问题。
我正在编写一个支持多个用户的网络应用程序。每个用户都有自己的数据库——使用H2。所有数据库模式都是相同的。
我想知道这将如何扩展......您有多少用户?你如何运行H2,什么模式?
所以我被困在如何将用户的数据库与该用户关联起来——也许在HTTPSession中关联它,并扩展spring的AbstractRoutingDataSource?
你必须建立一个SessionFactory
每个用户并将其关联到登录的用户(在Map
,使用登录作为密钥),然后获取Session
从给定的SessionFactory
。绑定生命周期SessionFactory
到 HTTP 会话似乎是一个好主意(节省一些内存),但我不确定 Spring 在这里会很有帮助。我可能是错的,但有一个变体HibernateUtil
类和完全编程的方法看起来更容易。顺便说一句,我不确定每个用户是否需要多个连接。
但这不会影响 Hibernate 的缓存吗?
什么缓存?
另一种方法是为每个数据源提供一个 SessionFactory,即使每个数据源的架构都是相同的......所以我认为这是一种浪费。
哦,这是一种浪费,但这就是您想要做的(每个用户一个数据库)。而你别无选择(你需要一个SessionFactory
每个数据库)。为什么实际上每个用户需要一个数据库?你确定这是一个明智的决定吗?正如已经暗示的那样,这意味着很多麻烦,无法很好地扩展,增加了复杂性等等。为什么不使用单个数据库并将数据与用户相关联呢?
无论如何,选择数据源需要是动态的 - 它们不能在上下文文件中预先配置,因为每个新用户都会创建自己的数据库。有现成的框架/解决方案吗?
据我所知。这也是为什么我认为你必须以编程方式完成所有事情。
我对 Hibernate Shards 不太了解,也许这有用?
考虑到您的应用程序的动态需求,我不认为它有什么帮助。