【发布时间】:2015-09-22 18:58:55
【问题描述】:
如何设置 Slick(使用 2.1)使其使用与 Spring 配置关联的相同事务管理器?
更多上下文:我们有一个应用程序依赖于 Slick 的数据库工作,并使用一个库 (Activiti),其事务管理由 Spring 提供。我们将对该库的调用包装在 Spring 事务周围,如下所示,我们希望每当 Activiti 方面的事务失败时,我们的 Slick 调用发出的查询也会回滚。
def withSpringTransaction[T](f: TransactionStatus => T)(implicit transactionTemplate: TransactionTemplate) =
transactionTemplate.execute(new TransactionCallback[T] {
protected def doInTransaction(status: TransactionStatus) = f(status)
})
withSpringTransaction { transactionStatus =>
db.withTransaction { session =>
// Activiti API calls
// Slick API calls
}
}
我知道如果出现问题,我们可以在前面的代码中同时调用 transactionStatus.setRollbackOnly() 和 session.rollBack(),但我们的问题在于更复杂的场景,即 Activiti 在其他地方调用某个侦听器,而无法访问在此声明的会话范围。
【问题讨论】: