7

给出以下配置:

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

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

4

2 回答 2

2

您必须在 Configuration 类上使用此注释

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

并配置这个:

  1. 枚举所有要扫描的包/类以查找将包含在此配置中的 mongo dao
  2. 指定此配置扫​​描的 Mongo Dao 将使用的 MongoTemplate(bean name)

因此,您需要为每组 Mongo Dao 及其对应的 MongoTemplate 配置一个配置类。

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

于 2015-09-19T09:17:11.873 回答
0

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

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

于 2013-11-07T16:27:00.207 回答