Как использовать несколько баз данных mongodb в весеннем загрузочном приложении?

В моем приложении мне нужно использовать две базы данных MongoDB. Я не знаю, как добавить 2 базы данных MongoDB в файл application.properties в приложении spring.

Вот файл application.properties моего проекта,

spring.data.mongodb.database=DB1
spring.data.mongodb.authentication-database=DB1
spring.data.mongodb.host=dev-ng-mongo1.domain.com
spring.data.mongodb.password=9876512
spring.data.mongodb.port=27017 
spring.data.mongodb.username=pavan

но я хочу использовать другую базу данных MongoDB для того же проекта. Как я могу добавить новую базу данных в файл application.properties.


person pavan kalyan    schedule 19.09.2018    source источник
comment
Проверьте это: stackoverflow.com/questions/48770121/   -  person    schedule 19.09.2018


Ответы (1)


Выполните следующие шаги, чтобы настроить несколько источников данных mongodb.

  1. Определите свои первичные и вторичные свойства mongodb, как показано ниже, в application.properties, замените ими свои данные базы данных:

    ######Primary Mongo DB########################
    spring.data.mongodb.host=localhost
    spring.data.mongodb.database=primary
    spring.data.mongodb.port=27017
    spring.data.mongodb.password=*******
    spring.data.mongodb.username=*******
    
    ###########Secondary MongoDB#####################
    mongodb.host=localhost
    mongodb.port=27017
    mongodb.database=secondary
    mongodb.username=******
    mongodb.password=******
    
  2. Теперь добавьте несколько конфигураций базы данных Mongo.

    @Configuration
    public class MultipleMongoConfig {
    
    @Primary
    @Bean(name = "primary")
    @ConfigurationProperties(prefix = "spring.data.mongodb")
    public MongoProperties getPrimary() {
        return new MongoProperties();
    }
    
    @Bean(name = "secondary")
    @ConfigurationProperties(prefix = "mongodb")
    public MongoProperties getSecondary() {
        return new MongoProperties();
    }
    
    @Primary
    @Bean(name = "primaryMongoTemplate")
    public MongoTemplate primaryMongoTemplate() throws Exception {
        return new MongoTemplate(primaryFactory(getPrimary()));
    }
    
    @Bean(name = "secondaryMongoTemplate")
    public MongoTemplate secondaryMongoTemplate() throws Exception {
        return new MongoTemplate(secondaryFactory(getSecondary()));
    }
    
    @Bean
    @Primary
    public MongoDbFactory primaryFactory(final MongoProperties mongo) throws Exception {
        return new SimpleMongoDbFactory(new MongoClient(mongo.getHost(), mongo.getPort()),
                mongo.getDatabase());
    }
    
    @Bean
    public MongoDbFactory secondaryFactory(final MongoProperties mongo) throws Exception {
        return new SimpleMongoDbFactory(new MongoClient(mongo.getHost(), mongo.getPort()),
                mongo.getDatabase());
    }
    

    }

  3. Теперь включите EnableMongoRepositories для вашего основного и дополнительного. Пожалуйста, убедитесь, что вы изменили basePackages = "com.example.springbootmultipledatasource.primary.repository" свой пакет репозитория здесь

    @Configuration
    @EnableMongoRepositories(basePackages = 
    "com.example.springbootmultipledatasource.primary.repository",
        mongoTemplateRef = "primaryMongoTemplate")
     public class PrimaryMongoConfig {
    
     }
    

Вторичный шаблон Mongo: убедитесь, что вы изменили пакет вторичного репозитория здесь basePackages = "com.example.springbootmultipledatasource.secondary.repository

    @Configuration
    @EnableMongoRepositories(basePackages = "com.example.springbootmultipledatasource.secondary.repository",
        mongoTemplateRef = "secondaryMongoTemplate")
   public class SecondaryMongoConfig {
   }

Теперь вы можете создать свой документ, репозиторий, службу, контроллер, и все готово. Ниже приведена структура моего проекта, которую вы можете создать или изменить.

Структура проекта

person kj007    schedule 19.09.2018
comment
Как добиться этого в защищенной LDAP MongoDB? URI изменится, и SimpleMongoDB Factory выйдет из строя. - person earl; 17.02.2020