MongoFactoryBean和SimpleMongoDbFactory之间的区别

时间:2014-02-07 13:50:35

标签: java mongodb spring-mongo

我正在设置MongoDB Spring MVC应用程序并尝试使用Service,DAO模式。

我阅读了Spring-Data-MongoDB引用here,但我不明白MongoFactoryBean和SimpleMongoDbFactory之间的区别是什么。

创建MongoTemplate bean的更好方法和原因是什么。

@Configuration
public class SpringMongoConfig {
    public @Bean
    MongoDbFactory mongoDbFactory() throws Exception {
       return new SimpleMongoDbFactory(new MongoClient(), "yourdb");
    }

    public @Bean
    MongoTemplate mongoTemplate() throws Exception {
       MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory());
       return mongoTemplate;
    }
}

OR。

@Bean
public MongoFactoryBean mongo() {
    MongoFactoryBean mongo = new MongoFactoryBean();
    mongo.setHost(env.getProperty("db.host"));
    mongo.setPort(env.getProperty("db.port",Integer.class,27017));
    return mongo;
}

@Bean
public MongoTemplate mongoTemplate() throws Exception{
    return new MongoTemplate(mongo().getObject(),env.getProperty("db.name"));
}

我什么时候使用MongoFactoryBean?何时使用MongoDbFactory?他们有不同的用例吗?

将MongoDB引导到Spring MVC的最佳方式是什么,以这种方式高度可扩展和可配置,并且还提供插入任何其他RDBMS(相同或不同功能)的规定。 (对于各种数据库类型,可能会有两种不同的DAO impls?)

2 个答案:

答案 0 :(得分:5)

我很惊讶这个问题仍未得到解答。虽然这可能不是您正在寻找的确切答案,但这是我对事物的看法。我发现使用第二种方法MongoFactoryBean是最好的方法。

仅仅因为有更多配置选项。例如,如果您想设置一个例外转换器,您可以使用MongoFactoryBean轻松完成。

如果我没记错,我可能错了,MongoFactoryBean是为了方便MongoDbFactory。意思是,它增加了另一层抽象。

总而言之,请采用第二种方法。

答案 1 :(得分:2)

我相信在第一个选项中你也可以设置第二个选项的相同设置:

public @Bean MongoDbFactory mongoDbFactory() throws Exception {
    UserCredentials credentials = new UserCredentials(env.getProperty("db.username"), env.getProperty("db.password"));
    return new SimpleMongoDbFactory(new MongoClient(env.getProperty("db.host"), env.getProperty("db.port",Integer.class, 27017)), env.getProperty("db.name"), credentials);
}

public @Bean MongoTemplate mongoTemplate() throws Exception {
    return new MongoTemplate(mongoDbFactory());
}