【问题标题】:Grails 'withTransaction' with alternate dataSource带有备用数据源的 Grails 'withTransaction'
【发布时间】:2012-06-22 23:29:28
【问题描述】:

试图弄清楚如何使用 grails 中的备用数据源打开事务。我定义了以下数据源...

dataSource {
    dbCreate = "update"
    url = "jdbc:h2:mem:testDb;MVCC=TRUE"
}

dataSource_ALT {
   dbCreate = "update"
   url = "jdbc:h2:mem:altDb;MVCC=TRUE"
}

我可以使用默认数据源来做到这一点...

Foo.withTransaction { status ->
    //...
}

但是当我尝试使用 ALT 数据源执行此操作时,我得到一个异常 - '未配置 transactionManager bean'...

Foo.ALT.withTransaction { status ->
   //...
}

有没有办法使用不同的数据源启动事务?我已经进行了一些挖掘,但没有找到太多。

谢谢!

【问题讨论】:

  • 我没有尝试过,但如果它不受支持,在 grails 2 中添加多个数据源似乎是一个错误/遗漏的要求。您将不得不使用针对域使用 .withTransaction 的解决方法只有一个数据源的对象。
  • 不使用快捷键有用吗? def sessionFactory_ALT def doStuff(){ def tx = sessionFactory_ALT.currentSession.beginTransaction() tx.commit() tx.rollback() etc... }

标签: spring grails grails-orm


【解决方案1】:

@Raphael 您的建议确实有效。我能够进行下一步并通过分配事务管理器来使 withTransaction 正常工作。它们似乎是被创造出来的,只是没有附着。它们以 Spring bean 的形式存在,命名为 transactionManager_ALT(在本例中)。不确定实际上是什么创建了它们,以及为什么它们没有附加到 GormStaticApi。

即在这里你会做:

Foo["ALT"].transactionManager = transactionManager_ALT

可能会尝试选择一个域类并分配所有不同的事务管理器,看看是否可行,然后在任何地方使用该域类来启动事务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-30
    • 2015-03-24
    • 2015-01-12
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    相关资源
    最近更新 更多