如何使用凭据动态创建MongoTemplate实例?

时间:2017-11-28 22:42:39

标签: mongodb spring-data spring-data-mongodb mongodb-java

在Spring Data MongoDB 1.9.0-RELEASE之前,我能够创建一个MongoTemplate对象,如下所示: new MongoTemplate(client, dbName, credentials)。升级后,此构造函数不再有效,因此使用MongoCredential时会出错。但是,没有使用MongoTemplate的类似MongoCredential构造函数。现在看来,指定凭证的唯一方法是构造MongoClient对象。

但是,由于我的应用程序在数据库级别是多租户,因此不起作用,因为它不允许在构造之后添加其他凭据(意味着无法动态创建MongoTemplate)。它也不理想,因为如果列表中的任何凭据都是错误的,则没有任何数据库连接可用,而不是只有凭证不良的凭据。

我也不想为每个数据库创建一个新的MongoClient实例。根据我的理解,这样做会为每个数据库创建一个新连接,而不是让MongoClient管理连接池,这最终是不可持续的,因为Mongo只允许有限数量的连接。

除了继续使用过时的库之外,我还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

我最终要做的是在admin数据库中创建一个用户,该用户可以访问我需要的所有数据库(通过roles数组实现)。我创建了一个MongoClient,作为该用户对admin数据库进行授权。然后,我可以动态创建MongoTemplate个对象而不会出现问题,因为我授权的用户对这些数据库具有readWrite权限。