首页 文章

Spring Mongodb:如何使用MongoClientFactoryBean配置mongoDB

提问于
浏览
6

在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;
}

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

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

2 回答

  • 4

    是的它返回 Mongo :-(

    但是 MongoClient 延伸到 Mongo 无论如何都会好的,只是 @Autowire beans 子作为Mongo

    @Autowired
    private Mongo mongo;
    

    然后使用它

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

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

  • 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")

相关问题