我希望在多个数据库中具有相同的集合结构,如下所示
Database A:
CollectionA
CollectionB
Database B:
CollectionA
CollectionB
假设我用各自的存储库创建我的文档。
@Document(collection = collectionA)
@Document(collection = collectionB)
我怎样才能做一个配置来强制spring在操作之间交换数据库的repository beans?我已经搜索过了,我发现我需要创建一个mongoTemplate bean,它似乎没有工作,这个方法只在仓库自动连接时调用一次,但在插入的地方不调用。
Eg.
# Inside a service
@Autowired
DocumentARepository documentARepository;
documentARepository.insert(documentA); # Inserts in Database A Collection A
TenantContext.setTenant("Database B"); # Changes MongoDb Repository Tenant (Database) thread safe class i use for jdbc multitenancy
docucmentARepository.insert(documentB); #Insert in Database B Collection A
查看了Multi-tenant mongodb database based with spring data及其旧版本的spring data mongodb im using 3.1.3
如果任何人可以建议我如何调试在插入文档期间使用的bean,那么欢迎我自己弄清楚。不知道我将如何手动弄清楚。Thanks in advance
1条答案
按热度按时间z4bn682m1#
将通过一起放弃MongoRepositorie接口并使用MongoTemplate bean来解决这个问题。配置如下:
Mongo配置文件
MultiTenantMongoDbFactory文件(这是一个用来创建mongo模板的工厂,似乎是用来确定每次保存的数据库,尽管我没有测试后台批处理)
TenantContext文件,我用来为jdbc mariadb和mongodb设置租户上下文,因为我有这两个文件
如果有人想复制,请在此处添加完整代码
https://github.com/mplein2/spring_data_mongodb_mutlitenancy
编辑:在进行更改之后,生成的存储库也是多租户的。不需要直接使用mongo模板