基于spring数据的多租户mongodb数据库
我想让我的web应用程序使用mongodb和spring data multitenat 基本上,我希望将所有实体(集合)复制到不同的数据库中。然后(基于一些规则,例如登录系统的用户),我想将一些实体实例(文档)存储到正确的数据库中 例如,我有一个名为DBNameProviderService.getDbName()的服务,它动态地返回数据库的名称。如何使用此服务动态选择正确的数据库 已编辑 如果不够清楚,很抱歉。也许举个例子会更清楚 在我的系统中,我可以注册/登录用户(他们存储在名为general_db的数据库中的用户集合中) 我还有一个实体A(标记为多租户,只是扩展了一个接口)。如果我以User1身份登录,我希望在集合A的数据库User1_db中始终存储一个A实例,而如果我以User2身份登录,我希望在集合A的User2_db中存储一个A实例 所以在这个场景中,问题是我不能为每个用户创建MongoTemplatebean,因为用户可以在系统中注册,所以它是动态的。我需要MongoTemplate动态选择数据库。查看类似问题基于spring数据的多租户mongodb数据库,spring,mongodb,spring-data-mongodb,Spring,Mongodb,Spring Data Mongodb,我想让我的web应用程序使用mongodb和spring data multitenat 基本上,我希望将所有实体(集合)复制到不同的数据库中。然后(基于一些规则,例如登录系统的用户),我想将一些实体实例(文档)存储到正确的数据库中 例如,我有一个名为DBNameProviderService.getDbName()的服务,它动态地返回数据库的名称。如何使用此服务动态选择正确的数据库 已编辑 如果不够清楚,很抱歉。也许举个例子会更清楚 在我的系统中,我可以注册/登录用户(他们存储在名为gener
还可以进行切分,并将要使用和搜索的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) {
}