【问题标题】:Perform search operations in multiple Databases in Spring Boot project在 Spring Boot 项目中在多个数据库中执行搜索操作
【发布时间】:2023-04-03 11:20:02
【问题描述】:

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

【问题讨论】:

    标签: java mongodb spring-boot


    【解决方案1】:

    它不会开箱即用。如果你包含 spring-boot mongodb starter 项目,它会寻找属性 'spring.data.mongodb.uri' 连接到单个数据库,如果没有找到,它会尝试连接到 'localhost: 27017'。然后,这个单一数据库将自动用于所有 Spring Data Repositories。

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

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

    取决于您项目的复杂性,但对于这个用例,我根本不会使用 Spring Data,而是坚持使用 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()){
        ...   
    }
    

    【讨论】:

    • 是的,我明白你的意思,但主要问题我不知道我应该如何进行
    • 我添加了一些关于如何直接使用 MongoClient 而不会弄乱动态 spring bean 的代码。
    • 还有一件事是我可以动态传递数据库 uri 吗?
    • “动态”定义?它是在环境变量中,在属性文件中,还是从表中读取?数据库 URI 是您传递给 MongoClient 的内容,因此您可以从任何您想要的地方读取它。即使使用 Spring Boot,您也可以在主应用程序类中创建自定义 @Bean mongoClient() 方法,并且不再需要“spring.data.mongodb.uri”属性。
    • MongoCollection mongoCollection = database.getCollection(collectionName);可迭代 字段 = mongoCollection.find(); fields.forEach(field -> { System.out.println(field.toJson()); });
    【解决方案2】:

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

    【讨论】:

    • 假设我必须连接两个不同服务器的两个不同数据库这种情况可能吗?如果是,请告诉我如何编写配置
    猜你喜欢
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    相关资源
    最近更新 更多