Spring Boot使用存储库访问多个Mongo数据库

时间:2017-01-06 15:42:07

标签: mongodb spring-boot

我有一个需要访问多个租户数据库的spring boot tenant应用程序。所有数据库都在一台MongoDB服务器上。每个租户都有自己的密码保护数据库。我已经能够使用MongoClient使其工作,如下所示。

 MongoClient mongoClient = new MongoClient(mongoConnectionUri,
   mongoCredentials);
 DB tenantDB = mongoClient.getDB(tenantWebRequest.getNewTenantId());

MongoClient易于使用,如上所示,可以轻松连接到运行时mongo数据库。但是,在向数据库写入/查询文档时,MongoClient在编程上是笨拙的。我宁愿使用MongoRespository及其强大的CRUD和自定义查询方法。这是单个MongoDB存储库的代码

 public class MongoConfig extends AbstractMongoConfiguration {

@Override
protected String getDatabaseName() {
    return mongodbname;
}

@Override
public Mongo mongo() throws Exception {

    return new MongoClient(mongoconnectionuri, mongoport);

}

// Mongo Connection URI
@Value("${spring.data.mongodb.uri}") 
private String mongoconnectionuri;

// Mongo Connection Port
@Value("${spring.data.mongodb.port}")
private int mongoport;

// Mongo Tenant Authorization database
@Value("${spring.data.mongodb.database}") 
private String mongodbname;

}

存储库看起来像,

public interface UserRepository extends MongoRepository< Tenant, String>{

    public User findByTenantname(String tenantname);

    } 

此存储库适用于单个静态数据库。如何在运行时创建和访问不同租户数据库的地方使用存储库?我提前不知道租户的名字。当新租户注册该服务时,他们访问Web服务并键入其新租户名称。我使用该名称并创建一个新的租户数据库,其中包含使用客户元数据初始化的多个集合。我正在使用带有注释的弹簧靴和Gradle。

0 个答案:

没有答案