我正在设置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?)
答案 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());
}