通过spring-data-mongodb访问动态数据库

时间:2014-09-15 12:10:44

标签: mongodb spring-mongo

我试图根据运行时变量访问不同数据库中的数据。为此,我有MongoOperations的自定义实现。我的实现与MongoTemplate相同,但我的getDb()方法如下所示:

public DB getDb() {
    return mongoDbFactory.getDb(PropertyManager.getCurrentTenant().getCode());
}

在阅读交易中的数据时,我收到了以下错误:

[TransactionSynchronizationUtils] - TransactionSynchronization.beforeCompletion threw exception
java.lang.IllegalStateException: No value for key [Mongo: localhost/127.0.0.1:27017] bound to thread

它似乎无害,因为只记录了这个异常:

public static void triggerBeforeCompletion() {
    for (TransactionSynchronization synchronization : TransactionSynchronizationManager.getSynchronizations()) {
        try {
            synchronization.beforeCompletion();
        }
        catch (Throwable tsex) {
            logger.error("TransactionSynchronization.beforeCompletion threw exception", tsex);
        }
    }
}

但我很难搞清楚为什么会这样。有线索吗?

版本:

  • spring-data-mongodb:1.2.3.RELEASE
  • spring-tx:4.0.5.RELEASE

针对类似问题提出bug,已在1.1 GA版本中修复。

1 个答案:

答案 0 :(得分:0)

通过扩展

起作用
  • SimpleMongoDbFactory:在DB getDb(String dbName)中返回自定义数据库。
  • MongoTemplate:供应上述工厂。