0

我正在尝试根据运行时变量访问来自不同数据库的数据。为此,我有一个自定义实现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

针对类似问题提出了一个错误1.1 GA,该错误已在发行版中修复。

4

1 回答 1

0

它通过扩展工作

  • SimpleMongoDbFactory:返回自定义数据库DB getDb(String dbName)
  • MongoTemplate: 供应上述工厂。
于 2014-09-19T09:30:40.000 回答