在Spring Boot项目中的多个数据库中执行搜索操作



我的问题-我在ubuntu服务器中安装了mongodb,它有多个数据库,我想连接到服务器上安装的mongodb并获取所有数据库(数据库名称、每个数据库的集合(,并对所有数据库执行搜索操作。注意-我不知道数据库的名称

它不会开箱即用。如果包含spring-boot mongodb启动程序项目,它将查找属性"spring.data.mongodb.uri"以连接到单个数据库,如果找不到,它将尝试连接到"localhost:27017"。然后,这个单独的数据库将自动用于所有Spring数据存储库。

您可以为不同的数据库添加额外的MongoClient bean,但您需要一些工作来将不同的Spring数据存储库连接到这些不同的bean。

如果你想使用一组动态数据库,也就是说,当你不知道哪些数据库或有多少数据库时,你无论如何都不能将固定的MongoClients作为springbean来使用。您需要某种基于数据库数量创建多个MongoClient bean的工厂,以及连接到每个MongoClientbean的多个SearchRepository bean。

In取决于项目的复杂性,但对于本用例,我根本不使用SpringData,而是使用MongoDB Java客户端API:

Map<String, MongoClient> clientsPerDatabase = new HashMap<>();
// Setup
MongoClient mongoClient = new MongoClient(/* default database */);
MongoCursor<String> dbsCursor = mongoClient.listDatabaseNames().iterator();
while(dbsCursor.hasNext()) {
String databaseName = dbsCursor.next();
if (!"admin".equals(databaseName)) {
clientsPerDatabase.put(databaseName, new MongoClient(...+databaseName);
}
}
// Query
for(MongoClient client: clientsPerDatabase.values()){
...   
}

我会将Spring Boot应用程序配置为具有对数据库的管理员访问权限,然后使用本机查询来检索所有现有数据库、架构等的信息

最新更新