Spring-Data:指定MongoRepository应该使用哪个MongoTemplate

时间:2013-11-05 14:36:58

标签: mongodb spring-data spring-data-mongodb

给出以下配置:

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

是否有注释驱动方式告诉存储库使用哪个模板? 如果没有,还有什么办法可以解决这个问题?

2 个答案:

答案 0 :(得分:2)

您必须在Configuration类

上使用此批注
@EnableMongoRepositories(
basePackages = {"com.yyy.dao.jpa", "com.xxx.dao.jpa"},
mongoTemplateRef = "MovieTemplate"
)

并配置:

  1. 枚举要扫描的所有包/类以查找将包含在此配置中的mongo dao
  2. 指定将由此配置扫描的Mongo Dao使用的MongoTemplate(bean名称)
  3. 所以你需要为每一组Mongo Dao及其相应的MongoTemplate配置一个配置类。

    注意:如果您打算为每个模板使用不同的Mongo客户端,那么您必须确保将相应的Mongo客户端bean传递给MongoTemplate,例如使用限定符或与Mongo匹配的其他参数名称。声明为@Bean的方法名称。

答案 1 :(得分:0)

偶然发现了这个问题:Spring-data-mongodb connect to multiple databases in one Mongo instance

除了解决这个问题之外,注释驱动的spring-data-mongodb(1.3.1.RELEASE)似乎根本没有提供开箱即用的解决方案:/