多用户数据源 - Spring + Hibernate

Dzh*_*zhu 16 java spring hibernate jdbc multi-tenant

我正在编写一个支持多个用户的Web应用程序.每个用户都有自己的数据库 - 使用H2.所有数据库模式都是相同的.

我希望将Spring + Hibernate用于此应用程序.

所以我坚持如何将用户的数据库与该用户关联 - 可能在HTTPSession中关联它,并扩展spring的AbstractRoutingDataSource?但这不会影响Hibernate的缓存吗?另一种方法是使用每个数据源的SessionFactory,即使每个数据源的模式都相同......所以我认为这是一种浪费.

无论如何选择数据源都需要是动态的 - 它们不能在上下文文件中预先配置,因为每个新用户都将创建自己的数据库.有没有现有的框架/解决方案?

我不太了解Hibernate Shards,也许这有用吗?

Pas*_*ent 8

根据某些资源的建议,我可能错误地认为(严格)SessionFactory每个数据库需要一个数据库:

我将花一些时间重新阅读明天的所有内容(我没有得到所有细节,说实话)并完全理解这种设置的含义(虽然它似乎很明显它将破坏二级缓存) .我稍后会再回来看看.


我正在编写一个支持多个用户的Web应用程序.每个用户都有自己的数据库 - 使用H2.所有数据库模式都是相同的.

我想知道这会如何扩展...你有多少用户?你怎么运行H2,什么模式?

所以我坚持如何将用户的数据库与该用户关联 - 可能在HTTPSession中关联它,并扩展spring的AbstractRoutingDataSource?

您必须构建SessionFactory每个用户并将其与登录用户相关联(在a中Map,使用login作为密钥),然后Session从给定的用户获取SessionFactory.将生命周期绑定SessionFactory到HTTP会话似乎是一个好主意(为了节省一些内存),但我不确定Spring在这里会非常有用.我可能错了,但是HibernateUtil课堂的变化和完全程序化的方法看起来更容易.我不确定顺便说一句,每个用户都需要多个连接.

但这不会影响Hibernate的缓存吗?

什么缓存?

另一种方法是使用每个数据源的SessionFactory,即使每个数据源的模式都相同......所以我认为这是一种浪费.

哦,这是浪费,但这就是你想要做的(每个用户一个数据库).而你没有选择(你需要一个SessionFactorydatadabase).为什么每个用户实际上需要一个数据库?你确定这是一个明智的决定吗?正如已经暗示的那样,这意味着很多麻烦,不能很好地扩展,增加复杂性等.为什么不使用单个数据库并将数据与用户关联?

无论如何选择数据源都需要是动态的 - 它们不能在上下文文件中预先配置,因为每个新用户都将创建自己的数据库.有没有现有的框架/解决方案?

据我所知.这也是我认为你必须以编程方式完成所有事情的原因.

我不太了解Hibernate Shards,也许这有用吗?

鉴于您的应用程序的动态需求,我不知道它是如何帮助的.