Разница между MongoFactoryBean и SimpleMongoDbFactory

Я настраиваю приложение MongoDB Spring MVC и пытаюсь использовать шаблон Service, DAO.

Я прочитал справочник Spring-Data-MongoDB здесь, но я не понимаю, в чем разница между MongoFactoryBean и SimpleMongoDbFactory.

Что было бы лучше и почему для создания bean-компонента MongoTemplate.

@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 таким образом, чтобы он был легко масштабируемым и настраиваемым, а также предоставлял возможность подключения любой другой СУБД (для той же или другой функциональности). (Возможно, два разных DAO для разных типов БД?)


person shams.haq    schedule 07.02.2014    source источник
comment
P.S: Я хочу максимально придерживаться конфигурации на основе аннотаций.   -  person shams.haq    schedule 07.02.2014


Ответы (2)


Я удивлен, что на этот вопрос до сих пор нет ответа. И хотя это может быть не тот ответ, который вы ищете, вот мой взгляд на вещи. Я обнаружил, что использование второго подхода, MongoFactoryBean, является лучшим подходом.

Просто потому, что есть больше вариантов конфигурации. Например, если вы хотите установить транслятор исключений, вы можете легко сделать это с помощью MongoFactoryBean.

Если я правильно помню, а могу и ошибаться, MongoFactoryBean предназначен для удобства MongoDbFactory. Это означает, что он добавляет еще один уровень абстракции.

В общем, идите со вторым подходом.

person taylorcressy    schedule 16.04.2014
comment
Я знал, что рано или поздно на это будет дан ответ. Спасибо, подожду, если появится что-то еще, иначе отмечу как ответ. - person shams.haq; 23.04.2014

Я считаю, что в первом варианте вы также можете установить те же настройки второго варианта:

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());
}
person araujodavid    schedule 06.01.2015