如何使用spring-data-mongodb实现多租户



我是使用spring-data-mongodb的mongodb的多租户新手,我们需要在线程安全的相同代码中使用spring-data-mongodb进行rest api和调度任务(我们在应用程序中有多个调度程序)。它的自动装配蒙古包将使应用程序线程安全,因为从调度程序和api都可以访问同一个蒙古包。在这种情况下,请给我一个好的练习。

克丽丝

MongoTemplate本身是线程安全的,即您可以同时从多个线程调用它,并且它将正确工作,即正确地向MongoDB发送不同的请求。

但这并不能保证一致性:如果调度程序在同一任务中运行并执行多个更新,则API调用可能会获得一些更新的记录和一些尚未更新的记录。

顺便说一下:多租户在同一数据库中拥有来自多个组织实体的数据。我不确定这与你的问题有什么联系,你是说多线程吗?

如果您使用不同的数据库,那么您不能使用自动连接的MongoTemplate。对于自动装配,必须有一个单独的实例,但是由于数据库连接字符串是一个依赖于MongoTemplate的,所以也必须有一个单独的数据库。

您可以采用一种不直接自动连接蒙古模板的方法,而是使用某种工厂模式为当前租户创建正确的蒙古模板。有关示例,请参见制作spring-data-mongodb多租户。(这是一个老问题,但它的答案会不时更新)。

或者您可以使用基础设施解决方案,并部署应用程序的单独实例,每个租户一个,例如在Kubernetes上。

最新更新