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

Java 在Spring Boot项目中的多个数据库中执行搜索操作,java,mongodb,spring-boot,Java,Mongodb,Spring Boot,我的问题-我在ubuntu服务器上安装了mongodb,它有多个数据库,我想连接到服务器上安装的mongodb,获取所有数据库(数据库名称、每个数据库的集合),并对所有数据库执行搜索操作。 注意-我不知道数据库的名称我会将Spring Boot应用程序配置为具有对数据库的管理员访问权限,然后使用本机查询来检索所有现有数据库、架构等的信息这不会立即生效。如果包含spring boot mongodb starter项目,它将查找属性“spring.data.mongodb.uri”以连接到单个数据

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

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

这不会立即生效。如果包含spring boot mongodb starter项目,它将查找属性“spring.data.mongodb.uri”以连接到单个数据库,如果找不到,它将尝试连接到“localhost:27017”。然后,该单一数据库将自动用于所有Spring数据存储库

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

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

In取决于项目的复杂性,但对于本用例,我根本不使用Spring数据,而是坚持使用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()){
    ...   
}
Map clientsPerDatabase=newhashmap();
//设置
MongoClient MongoClient=新的MongoClient(/*默认数据库*/);
MongoCursor dbsCursor=mongoClient.listDatabaseNames().iterator();
while(dbsCursor.hasNext()){
字符串databaseName=dbsCursor.next();
如果(!“admin”.equals(数据库名)){
put(数据库名,新MongoClient(…+数据库名);
}
}
//质疑
for(MongoClient客户端:clientsPerDatabase.values()){
...   
}

假设我必须连接两台不同服务器的两个不同数据库,这种情况可能吗?如果可能,请告诉我如何编写配置。是的,我明白你的意思,但主要问题是我不知道如何处理。我添加了一些代码,说明如何直接使用MongoClient而不影响动态spring Bean。还有一个ing是我可以动态传递数据库uri吗?定义“动态”?它是在环境变量中、属性文件中还是从表中读取?数据库uri是传递给MongoClient的内容,因此您可以从任何地方读取它。即使使用Spring Boot,您也可以创建自定义@Bean MongoClient()方法,它将不再需要'spring.data.mongodb.uri'属性。MongoCollection MongoCollection=database.getCollection(collectionName);Iterable fields=MongoCollection.find();fields.forEach(field->{System.out.println(field.toJson());});