Как указать использование базы данных mongo в MongoRepository при наличии нескольких баз данных - PullRequest
1 голос
/ 07 мая 2019

В моем весеннем загрузочном приложении я настроил две базы данных в своем файле yml.Итак, теперь я хочу указать, какую базу данных использовать в каждом MongoRepository.Это возможно?Если да, то как это сделать?Заранее спасибо.

yml файл:

spring:
  data:
mongodb:
first:
  host: 127.0.0.1
  port: 27017
  database: db_admin
      rest:
        base-path: /admin

second:
  host: 127.0.0.1
  port: 27018
  database: `user_forms`
      rest:
        base-path: /users

Итак, в пользовательском MongoRepository я хочу использовать базу данных user_forms.

Пользователь MongoRepository:

  @RepositoryRestResource(collectionResourceRel = "users",path = "users")
  public interface UserRepository extends MongoRepository<User, String> {

  List<User> findByUserId(String id);

}

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Добавление ответа, несмотря на пометку вопроса как дубликата, поскольку существует некоторая путаница в том, использует ли MongoRepository MongoTemplate.

Когда вы внедряете MongoRepository, он проксируется экземпляром SimpleMongoRepository учебный класс.у него есть поле

private final MongoOperations mongoOperations;

MongoOperations - это интерфейс, а MongoTemplate - его реализация.

Теперь вопрос в том, откуда взялся этот монго-шаблон по умолчанию в Spring.Загрузочное приложение.Посмотрите на MongoDataAutoConfiguration

@Bean
@ConditionalOnMissingBean
public MongoTemplate mongoTemplate(MongoDbFactory mongoDbFactory,
                                   MongoConverter converter) {
    return new MongoTemplate(mongoDbFactory, converter);
}

Поэтому я все еще утверждаю, что это дубликат: Настройка нескольких репозиториев MongoDB с Spring Data Mongo

0 голосов
/ 08 мая 2019

Автоконфигурация Spring Boot предоставляет MongoTemplate по умолчанию для облегчения создания репозиториев MongoDB.

Тем не менее, если вы хотите использовать несколько баз данных MongoDB, вам необходимо

  1. зарегистрировать MongoTemplates для каждой базы данных MongoDB
  2. назначить каждый из MongoTemplates для базовых пакетовMongoRepositories соответственно, так что Spring Data MongoDB проинформирован об использовании правильного шаблона при создании репозиториев.

Например, скажем, вы зарегистрировали 2 MongoTemplates, а именно templateAdmin и templateUser, явно настроенные для их MongoDB.Затем вы можете использовать подобный код, чтобы сообщить Spring Data MongoDB, какие репозитории используют какой шаблон:

@EnableMongoRepositories(
  basePackages = "com.the.base.package.name.of.admin.repositories",
  mongoTemplateRef = "adminTemplateBeanName")
@Configuration
public class AdminMongoConfig {

  @Bean
  public MongoTemplate adminTemplateBeanName() {
    //...
  }
}

Настройка нескольких репозиториев MongoDB с Spring Data Mongo В основном объяснил почти все пункты, что я сказал,Поэтому я предпочитаю предположить, что у вас может быть неправильное представление о том, что MongoTemplate не имеет отношения к MongoRepository, а это не так.

...