Spring Mongodb:如何使用MongoClientFactoryBean

时间:2015-07-21 11:21:58

标签: spring mongodb spring-data

在Spring中配置MongoDB时,参考sais:

像这样注册MongoDB:

@Configuration
public class AppConfig {

  /*
   * Use the standard Mongo driver API to create a com.mongodb.Mongo instance.
   */
   public @Bean Mongo mongo() throws UnknownHostException {
       return new Mongo("localhost");
   }
}    
  

使用UnknownHostException检查异常来污染代码。使用checked异常是不可取的,因为基于Java的bean元数据使用方法作为设置对象依赖性的手段,使调用代码变得混乱。

所以Spring建议

@Configuration
public class AppConfig {

/*
 * Factory bean that creates the com.mongodb.Mongo instance
 */
 public @Bean MongoFactoryBean mongo() {
      MongoFactoryBean mongo = new MongoFactoryBean();
      mongo.setHost("localhost");
      return mongo;
 }
}

但不幸的是,因为Spring-Data-MongoDB 1.7 MongoFactoryBean 已被弃用并被 MongoClientFactoryBean 取代。

所以

@Bean
public MongoClientFactoryBean mongoClientFactoryBean() {
    MongoClientFactoryBean factoryBean = new MongoClientFactoryBean();
    factoryBean.setHost("localhost");
    return factoryBean;
}

然后是时候配置只有一个实现 SimpleMongoDbFactory 的MongoDbFactory。 SimpleMongoDbFactory只有两个不推荐使用的初始化程序,其中一个是 SimpleMongoDbFactory(MongoClient,DataBase)。 但 MongoClientFactoryBean 只能返回 Mongo 的类型,而不能返回 MongoClient

那么,我是否遗漏了一些东西来使这个纯粹的Spring配置工作?

2 个答案:

答案 0 :(得分:4)

是的,它会返回Mongo: - (

但是,MongoClient延伸Mongo无论如何都是正常的,只需将@Autowire豆作为Mongo

@Autowired
private Mongo mongo;

然后使用它

MongoOperations mongoOps = new MongoTemplate(mongo, "databaseName");

你真的需要SimpleMongoDbFactory吗?请参阅this post

答案 1 :(得分:3)

就我而言,我使用以下代码创建MongoTemplate。我正在使用MongoRespository。因为它只需要MongoTemplate我只需要创建MongoTemplate bean。

@Bean
public MongoTemplate mongoTemplate() throws Exception {
    MongoClient mongoClient = new MongoClient("localhost");
    MongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClient, "kyc_reader_test");
    return new MongoTemplate(mongoDbFactory);
}

在我的配置文件中,我添加了

@EnableMongoRepositories(basePackages = "mongo.repository.package.name")