Working on multi tenant spring boot application.
Where I m trying to connect to multiple database at runtime based on tenant id.
I created mongoclient with application name then service class provides db instance at runtime.
class MultiTenantMongoDbService {
private final ConcurrentMap<String, MongoDatabase> mongoDbFactories = new ConcurrentHashMap<>();
private MongoClient mongoClient;
@Autowired
public MultiTenantMongoDbService(MongoClient mongoClient){
this.mongoClient = mongoClient;
}
public MongoDatabase getDb() {
String tenantId = TenantContext.getCurrentTenant();
if(mongoDbFactories.containsKey(tenantId)){
return mongoDbFactories.get(tenantId);
}
mongoDbFactories.put(tenantId, getMongoDatabase(tenantId));
return mongoDbFactories.get(tenantId);
}
private MongoDatabase getMongoDatabase(String dbName){
return this.mongoClient.getDatabase(dbName);
}
}
inside dao classes i always call getDb().getCollection(“users”).find() Is it the good approach ?
In this approach i cannot apply codec registry at runtime ? because in the examples mongo collection is created at bean initialization.