Spring Mongodb:如何使用MongoClientFactoryBean配置mongoDB

min*_*pro 6 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");
   }
}    
Run Code Online (Sandbox Code Playgroud)

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

所以春天提出

@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;
 }
}
Run Code Online (Sandbox Code Playgroud)

但不幸的是,自从Spring-Data-MongoDB 1.7 MongoFactoryBean被弃用并被MongoClientFactoryBean取代.

所以

@Bean
public MongoClientFactoryBean mongoClientFactoryBean() {
    MongoClientFactoryBean factoryBean = new MongoClientFactoryBean();
    factoryBean.setHost("localhost");
    return factoryBean;
}
Run Code Online (Sandbox Code Playgroud)

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

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

tho*_*s.g 5

是的,它返回一个Mongo:-(

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

@Autowired
private Mongo mongo;
Run Code Online (Sandbox Code Playgroud)

然后使用它

MongoOperations mongoOps = new MongoTemplate(mongo, "databaseName");
Run Code Online (Sandbox Code Playgroud)

你真的需要SimpleMongoDbFactory吗?看到这个帖子