我不熟悉使用spring-data-mongodb的mongodb的多租户,我们需要在线程安全的相同代码中使用spring-data-mongodb用于rest API和调度任务(我们的应用程序中有多个调度器)。自动装配mongoTemplate将使应用程序线程安全,因为将从调度器和API访问相同的mongoTemplate。在这种情况下,请给我一个好的实践。
问候
克里斯
发布于 2021-09-07 13:13:15
MongoTemplate本身是线程安全的,即你可以同时从多个线程调用它,它将正常工作,即正确地向MongoDB发送不同的请求。
但这并不能保证一致性:如果调度程序正在运行并在同一任务中执行多个更新,则API调用可能会获得一些已更新的记录和一些尚未更新的其他记录。
顺便说一句:多租户是指将来自多个组织实体的数据放在同一个数据库中。我不确定这与你的问题有什么联系,你的意思是多线程吗?
发布于 2021-09-08 07:55:17
如果使用不同的数据库,则不能使用自动连接的MongoTemplate。对于自动装配,必须有一个实例,但由于数据库连接字符串是MongoTemplate的依赖项,因此也必须有一个数据库。
您可以采用一种方法,不直接自动连接MongoTemplate,而是使用某种工厂模式为当前租户创建正确的MongoTemplate。有关示例,请参阅Making spring-data-mongodb multi-tenant。(这是一个老问题,但它的答案会不时更新)。
或者您可以使用基础架构解决方案,并部署应用程序的单独实例,每个租户一个实例,例如在Kubernetes上。
https://stackoverflow.com/questions/69088630
复制相似问题