我有一个需要访问多个租户数据库的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。