Spring-Data: укажите, какой MongoTemplate должен использовать MongoRepository.

Дана следующая конфигурация:

@Configuration
public class AppConfiguration {

  @Bean
  Mongo mongo() throws UnknownHostException {
    return new Mongo("localhost");
  }

  @Bean(name = "MovieTemplate")
  MongoTemplate beagleTemplate(Mongo mongo) {
    return new MongoTemplate(mongo, "MovieDatabase");
  }

  @Bean(name = "AnotherTemplate")
  MongoTemplate tmdbTemplate(Mongo mongo) {
    return new MongoTemplate(mongo, "AnotherDatabase");
  }
}

Мне нужен репозиторий для доступа к фильмам, который выглядит примерно так:

@Repository
public interface MoviesRepository extends
    MongoRepository<ProductPages, String> {

    ... some method declarations to access movies ...
}

Есть ли способ, управляемый аннотациями, сообщить репозиторию, какой шаблон использовать? Если нет, то что еще можно сделать для решения проблемы?


person wmax    schedule 05.11.2013    source источник
comment
Не уверен насчет репозитория, посмотрите аннотации Qualifier и Autowire. Можно автоматически связать нужный шаблон с Qualifier. Хотя я не уверен.   -  person titogeo    schedule 05.11.2013
comment
попробовал это с квалификаторами и автопроводкой, не повезло, думаю, это не должно работать таким образом. В любом случае аннотация квалификатора не применима к классам.   -  person wmax    schedule 07.11.2013


Ответы (2)


Вы должны использовать эту аннотацию в классе конфигурации

@EnableMongoRepositories(
basePackages = {"com.yyy.dao.jpa", "com.xxx.dao.jpa"},
mongoTemplateRef = "MovieTemplate"
)

и настройте это:

  1. перечислить все пакеты/классы для сканирования, чтобы найти mongo dao, который будет включен в эту конфигурацию
  2. укажите MongoTemplate (имя компонента), который будет использоваться Mongo Dao, сканируемым этой конфигурацией

Поэтому вам нужен класс конфигурации для каждого набора Mongo Dao вместе с соответствующим шаблоном MongoTemplate.

ПРИМЕЧАНИЕ. Если вы намерены использовать другой клиент Mongo для каждого шаблона, вам необходимо убедиться, что соответствующий клиентский компонент Mongo передается шаблону MongoTemplate, например, с использованием квалификатора или другого имени аргумента, которое соответствует имени метода Mongo с объявил @Bean.

person vine    schedule 19.09.2015
comment
спасибо за вашу попытку предложить решение Vine, выглядит многообещающе! К сожалению, у меня нет времени проверить это, чтобы принять его, может быть, кто-то (чем больше людей, тем лучше) сделает это. Проголосуйте за ваши усилия. - person wmax; 23.09.2015
comment
Кстати, на какой версии spring-data-mongodb вы тестировали свое решение? Это новая функция, которой не было в 1.3.1? - person wmax; 23.09.2015
comment
Я использую 1.7.2, но это поддерживается начиная с 1.3.1, проверьте это docs.spring.io/spring-data/mongodb/docs/1.3.1.RELEASE/api/org/ Кстати, это базовая конфигурация для нескольких mongoTemplate и MongoClient, аналогичная нескольким источникам данных JPA. - person vine; 25.09.2015

Просто наткнулся на этот вопрос: Spring-data- mongodb подключается к нескольким базам данных в одном экземпляре Mongo

Помимо решения этой проблемы, spring-data-mongodb(1.3.1.RELEASE), управляемый аннотациями, похоже, вообще не предлагает готового решения:/

person wmax    schedule 07.11.2013