基于spring数据的多租户mongodb数据库

基于spring数据的多租户mongodb数据库,spring,mongodb,spring-data-mongodb,Spring,Mongodb,Spring Data Mongodb,我想让我的web应用程序使用mongodb和spring data multitenat 基本上,我希望将所有实体(集合)复制到不同的数据库中。然后(基于一些规则,例如登录系统的用户),我想将一些实体实例(文档)存储到正确的数据库中 例如,我有一个名为DBNameProviderService.getDbName()的服务,它动态地返回数据库的名称。如何使用此服务动态选择正确的数据库 已编辑 如果不够清楚,很抱歉。也许举个例子会更清楚 在我的系统中,我可以注册/登录用户(他们存储在名为gener

我想让我的web应用程序使用mongodb和spring data multitenat

基本上,我希望将所有实体(集合)复制到不同的数据库中。然后(基于一些规则,例如登录系统的用户),我想将一些实体实例(文档)存储到正确的数据库中

例如,我有一个名为DBNameProviderService.getDbName()的服务,它动态地返回数据库的名称。如何使用此服务动态选择正确的数据库

已编辑

如果不够清楚,很抱歉。也许举个例子会更清楚

在我的系统中,我可以注册/登录用户(他们存储在名为general_db的数据库中的用户集合中)

我还有一个实体A(标记为多租户,只是扩展了一个接口)。如果我以User1身份登录,我希望在集合A的数据库User1_db中始终存储一个A实例,而如果我以User2身份登录,我希望在集合A的User2_db中存储一个A实例

所以在这个场景中,问题是我不能为每个用户创建MongoTemplatebean,因为用户可以在系统中注册,所以它是动态的。我需要MongoTemplate动态选择数据库。

查看类似问题
还可以进行切分,并将要使用和搜索的id设置为密钥的一部分。

您应该看看我的github项目,我遇到了一个非常类似的问题


在使用spring mongodb作为多租户时,我也遇到了类似的问题。最后,我找到了一种使用适配器在静态集合中管理MongoTemplates的方法

SpringMongoConfigadapter是一个示例代码段,可以帮助进行概述

弹簧配置:

<bean id="springConfig"  class="com.company.config.SpringMongoConfigAdapater"  >

<!-- default db initialization -->

    <property name="defaultDBName" value="${MONGOHQ_DB:db}"></property> 

<!-- mongo instance is referred to http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd  -->

     <property name="mongo" ref="mongo"></property>

        </bean>
最重要的是,使用ThreadLocal初始化多租户标识符(可以是dbName) 我提供了一个详细的信息可能会对你有所帮助,
点击

有关springboot 2.3.3的信息,请参见此

覆盖doGetMongoDatabase有助于实现多租户

    protected MongoDatabase doGetMongoDatabase(String dbName) {   
    }

我不明白问题是什么,你需要什么帮助。您的函数将根据输入值返回正确的数据库。@WiredPairie我更新了问题,请查看问题是否更清楚。提前感谢您如何使用此方法处理每个数据库的自定义身份验证?
 springMongoConfigAdapater .templateManager().getMongoOps().findAll(User.class); 
    protected MongoDatabase doGetMongoDatabase(String dbName) {   
    }