连接到mongodb中的多个数据库

时间:2014-09-23 06:10:57

标签: java spring mongodb spring-data-mongodb mongotemplate

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

  1. 仅使用Mongo实例,该实例将作为Web应用程序上下文的一部分进行初始化。使用此功能,我可以为给定的数据库获取MongoTemplate
  2. 使用MongoDBFactory
  3. 在第一种方法中,

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

    这两个中哪一个是理想的?

1 个答案:

答案 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创建逻辑(您尝试在相应的方法中自动装配)