8

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

我在这里阅读了 Spring-Data-MongoDB 参考,但我不明白 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;
    }
}

或者。

@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 实现?)

4

2 回答 2

7

我很惊讶这个问题仍然没有得到回答。尽管这可能不是您要寻找的确切答案,但这是我的看法。我发现使用第二种方法MongoFactoryBean是最好的方法。

仅仅是因为有更多的配置选项。例如,如果你想设置一个异常翻译器,你可以使用MongoFactoryBean.

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

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

于 2014-04-16T15:12:11.000 回答
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());
}
于 2015-01-06T14:42:25.560 回答