2014-02-07 9 views
5

Ich richte eine MongoDB Spring MVC-Anwendung ein und versuche Service, DAO-Muster zu verwenden.Unterschied zwischen MongoFactoryBean und SimpleMongoDbFactory

Ich las die Spring-Data-MongoDB Referenz here, aber ich verstehe nicht, was der Unterschied zwischen MongoFactoryBean und SimpleMongoDbFactory ist.

Was wäre ein besserer Weg, und warum, um eine MongoTemplate Bean zu erstellen.

@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; 
    } 
} 

ODER.

@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")); 
} 

Wann verwende ich MongoFactoryBean und wann verwende ich MongoDbFactory? Haben sie unterschiedliche Anwendungsfälle?

Auch was wäre die beste Möglichkeit, MongoDB in Spring MVC zu starten, so dass es in hohem Grade skalierbar und konfigurierbar ist, und bietet auch die Möglichkeit, jedes andere RDBMS (für gleiche oder andere Funktion) anzuschließen. (Zwei verschiedene DAO-Impls für verschiedene DB-Typen vielleicht?)

+0

P. S: Ich möchte halten basierte Konfiguration so weit wie möglich annotaion. – justshams

Antwort

5

Ich bin überrascht, dass diese Frage noch nicht beantwortet worden ist. Und obwohl dies nicht die genaue Antwort ist, die Sie suchen, hier ist meine Sicht auf die Dinge. Ich habe herausgefunden, dass die Verwendung des zweiten Ansatzes, MongoFactoryBean, der beste Ansatz ist.

Einfach weil es mehr Konfigurationsoptionen gibt. Wenn Sie z. B. einen Ausnahmeübersetzer festlegen möchten, können Sie dies einfach mit MongoFactoryBean tun.

Wenn ich mich richtig erinnere, und ich falsch liegen kann, ist die MongoFactoryBean für Bequemlichkeit für MongoDbFactory gedacht. Das heißt, es fügt eine weitere Ebene der Abstraktion hinzu.

Alles in allem gehen Sie mit dem zweiten Ansatz.

+0

Ich wusste, dass der ein oder andere Tag beantwortet wird. Danke, es wird warten, bis etwas anderes auftaucht, sonst wird es als Antwort markiert. – justshams

2

Ich glaube, dass in der ersten Option, die Sie auch die gleichen Einstellungen der zweiten Option kann:

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()); 
}