Spring Mongodb:如何使用 MongoClientFactoryBean 配置器 mongoDB

Spring Mongodb: How to configurer mongoDB with MongoClientFactoryBean

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

像这样注册 Mongo数据库:

@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");
   }
}    

pollutes the code with the UnknownHostException checked exception. The use of the checked exception is not desirable as Java based bean metadata uses methods as a means to set object dependencies, making the calling code cluttered.

所以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;
}

然后是配置 MongoDbFactory 的时候了,它只有一个实现 SimpleMongoDbFactory。 SimpleMongoDbFactory 只有两个未弃用的初始化器,其中之一是 SimpleMongoDbFactory(MongoClient, DataBase)。 但是 MongoClientFactoryBean 只能 return 类型的 Mongo 而不是 Mongo客户.

那么,我是否遗漏了一些让这个纯 Spring 配置起作用的东西?

是的returns一个Mongo:-(

但是随着 MongoClient 扩展 Mongo 无论如何都可以,只是 @Autowire 作为 Mongo

的 bean
@Autowired
private Mongo mongo;

那就用吧

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

你真的需要 SimpleMongoDbFactory 吗?参见 this post

就我而言,我使用以下代码来创建 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")