我有一个Web应用程序,我必须在mongodb中使用多个dbs(静态dbs集)。对于给定的请求,db依赖于作为请求的一部分传递的少数参数。我使用spring framework's mongoTemplate
与数据库进行交互。有两种方法可以为特定数据库获取MongoTemplate
实例。
Mongo
实例,该实例将作为Web应用程序上下文的一部分进行初始化。使用此功能,我可以为给定的数据库获取MongoTemplate
。MongoDBFactory
在第一种方法中,
@Autowired
private Mongo mongo;
MongoTemplate getMongoTemplate(String dbName) {
return new MongoTemplate(mongo, dbName);
}
第二种方法,
@Autowired
private MongoDbFactory factory;
MongoTemplate getMongoTemplate(String dbName) {
DB db = factory.getDb(dbName);
Mongo mongo = db.getMongo();
return new MongoTemplate(mongo);
}
这两个中哪一个是理想的?
答案 0 :(得分:0)
如果我的要求正确,您需要连接两个mongo dbs。在这种情况下,将无法使用一个MongoTemplate实例创建逻辑并用于创建两个mongo数据库连接。我觉得你必须在@Qualifier之上有两个类似的逻辑。
第一个配置类
@Autowired
@Bean(name="mongoDbFactory1")
private MongoDbFactory factory;
@Bean(name="mongoTemplate1")
MongoTemplate getMongoTemplate(String dbName) {
DB db = factory.getDb(dbName);
Mongo mongo = db.getMongo();
return new MongoTemplate(mongo);
}
另一个配置类
@Autowired
@Bean(name="mongoDbFactory2")
private MongoDbFactory factory;
@Bean(name="mongoTemplate2")
MongoTemplate getMongoTemplate(String dbName) {
DB db = factory.getDb(dbName);
Mongo mongo = db.getMongo();
return new MongoTemplate(mongo);
}
要使用mongoTemplate对Collection执行操作的类。
@Autowired
@Qualifier("mongoTemplate2")
MongoTemplate mongoTemplate;
再次,如果您的问题是所提到的逻辑中的任何一个是否有效,那么两者都将正确地假设您的代码中某处可以使用Mongo或MongoFactory创建逻辑(您尝试在相应的方法中自动装配)