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

9
下面给出了以下配置:
@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 ...
}

有没有注解驱动的方法告诉仓库使用哪个模板? 如果没有,还有什么其他方法可以解决这个问题?

不确定仓库,看注释Qualifier和Autowire。可以使用Qualifier自动连接所需的模板。虽然我不确定。 - titogeo
尝试使用限定符和自动装配,但没有成功,我猜这种方式不可行。好吧,限定符注解对于类来说也不适用。 - wmax
2个回答

3
你必须在配置类上使用此注释。
@EnableMongoRepositories(
basePackages = {"com.yyy.dao.jpa", "com.xxx.dao.jpa"},
mongoTemplateRef = "MovieTemplate"
)

需要完成以下配置:

  1. 枚举所有要扫描的包/类,以查找将包含在此配置中的Mongo Dao。
  2. 指定要由此配置扫描的Mongo Dao使用的MongoTemplate(bean名称)。

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

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


感谢您努力提出解决方案 Vine,看起来很有前途!不幸的是,我没有时间验证它以便接受它,也许其他人(人越多越好)会这样做。感谢您的努力,已为您点赞。 - wmax
顺便问一下,您在哪个版本的spring-data-mongodb上测试了您的解决方案?这是一个1.3.1中不存在的新功能吗? - wmax
我正在使用1.7.2版本,但是自1.3.1版本以来就已经支持了,请查看以下链接: http://docs.spring.io/spring-data/mongodb/docs/1.3.1.RELEASE/api/org/springframework/data/mongodb/repository/config/EnableMongoRepositories.html顺便说一下,这是用于多个mongoTemplate和MongoClient的基本配置,类似于多个JPA数据源。 - vine

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接