How would I connect to two Mongo repositories with AbstractReactiveMongoConfiguration

Viewed 308

My config for using a single mongo repo looks like this:

@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? I have tried creating a second config class with the other connection String but it didn't work. Thanks

1 Answers

You can do this using MongoTemplate Instances. You can specify multiple templates of mongoDB's. You can get the whole idea here

Your application.properties be like:

   #--- 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:

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