0

我有一个 Web 应用程序,我必须在 mongodb 中使用多个数据库(静态数据库集)。对于给定的请求,数据库依赖于作为请求的一部分传递的几个参数。我spring framework's mongoTemplate用于与数据库交互。有两种方法可以获取MongoTemplate特定数据库的实例。

  1. 通过仅使用Mongo将作为 Web 应用程序上下文的一部分初始化的实例。使用它,我可以获得MongoTemplate给定的数据库。
  2. 用一个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);
}

这两个哪个是理想的?

4

1 回答 1

0

如果我的要求正确,您想连接两个 mongo dbs。在这种情况下,不可能有一个 MongoTemplate 实例创建逻辑并用于创建两个 mongo db 连接。我觉得你必须有两个类似的逻辑,上面有@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 创建逻辑(您正在尝试以相应的方法自动装配)

于 2014-09-23T06:41:08.310 回答