首页 > 解决方案 > 如何使用 AbstractReactiveMongoConfiguration 连接到两个 Mongo 存储库

问题描述

我使用单个 mongo 存储库的配置如下所示:

@Configuration
@EnableMongoRepositories
public class ApplicationConfig extends AbstractReactiveMongoConfigutation {
     @Autowired
     private Environment env;

     @Value("${spring.data.mongodb.uri}")
     private String mongoUri;

     @Override
     protected String getDatabaseName(){
          return env.getProperty("spring.data.mongodb.database");
     }

     @Override
     protected void configureClientSettings(MongoClientSettings.Builder builder){
          builder.applyConnectionString(new ConnectionString(mongoUri)));
     }
}

我将如何创建另一个 mongodb 连接实例?我尝试使用另一个连接字符串创建第二个配置类,但它没有用。谢谢

标签: javaspringmongodbspring-bootazure-cosmosdb

解决方案


您可以使用MongoTemplate实例来做到这一点。您可以指定 mongoDB 的多个模板。你可以在这里得到整个想法

你的 application.properties 就像:

   #--- Primary MongoDB ---#
   spring.data.mongodb.uri=mongodb://admin:root@127.0.0.1:27017/primary
   #--- Secondary MongoDB ---#
   mongodb.uri=mongodb://admin:root@127.0.0.1:27017/secondary

你的配置类:

@Configuration
class MultipleMongoConfig {
@Primary
@Bean(name = ["primaryMongoProperties"])
@ConfigurationProperties(prefix = "spring.data.mongodb")
fun getPrimary() : MongoProperties {
    return MongoProperties()
}
@Bean(name = ["secondaryMongoProperties"])
@ConfigurationProperties(prefix = "MongoDB")
fun getSecondary() : MongoProperties {
    return MongoProperties()
}
@Primary
@Bean(name = ["primaryMongoTemplate"])
fun primaryMongoTemplate() : MongoTemplate {
    return MongoTemplate(primaryMongoDatabaseFactory(getPrimary()))
}
@Bean(name = ["secondaryMongoTemplate"])
fun secondaryMongoTemplate() : MongoTemplate {
    return MongoTemplate(secondaryMongoDatabaseFactory(getSecondary()))
}
@Primary
@Bean
fun primaryMongoDatabaseFactory(mongo : MongoProperties) : MongoDatabaseFactory {
    return SimpleMongoClientDatabaseFactory(
       mongo.uri
   )
}
@Bean
fun secondaryMongoDatabaseFactory(mongo : MongoProperties) : MongoDatabaseFactory {
    return SimpleMongoClientDatabaseFactory(
       mongo.uri
   )
}
}

您必须为 mongo 禁用 authoconfig:

    @SpringBootApplication(exclude = [MongoAutoConfiguration::class,
                           MongoDataAutoConfiguration::class])

推荐阅读