简体   繁体   English

我将如何使用 AbstractReactiveMongoConfiguration 连接到两个 Mongo 存储库

[英]How would I connect to two Mongo repositories with AbstractReactiveMongoConfiguration

My config for using a single mongo repo looks like this:我使用单个 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)));
     }
}

how would I create another instance of a mongodb connection?我将如何创建 mongodb 连接的另一个实例? I have tried creating a second config class with the other connection String but it didn't work.我尝试使用另一个连接字符串创建第二个配置类,但没有用。 Thanks谢谢

You can do this using MongoTemplate Instances.您可以使用MongoTemplate实例来做到这MongoTemplate You can specify multiple templates of mongoDB's.您可以指定 mongoDB 的多个模板。 You can get the whole idea here你可以在这里得到整个想法

Your application.properties be like:你的 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

your configuration class:你的配置类:

@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
   )
}
}

You have to disable the authoconfig for mongo:您必须禁用 mongo 的 authoconfig:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM