1

假设我有一个服务方法,我在其中进行一些验证/休息调用等(例如 someServiceMethod2 in),并希望以事务方式使其安全。我还有一个包含交易的 repoMethod。当父事务抛出异常时,如何回滚子事务?

有没有办法在事务中加入这两种方法?就像 TransactionDefinition.PROPAGATION_REQUIRED传播在 Spring lib 中所做的一样。

fun someServiceMethod () {
    client.withTransaction { c ->
        val bla = someServiceMethod2() // works

        someRepo.doSthRepoStuff(bla)) // works

        throw Exception("Just for test purpose") // crashes -> should also rollback transaction from doSthRepoStuff
    }
}

...

fun doSthRepoStuff(bla : String) {
    client.withTransaction { c -> 
        // do db related stuff here
    }
}

我现在唯一能做的就是只使用服务事务并将连接传递给 repo 方法。这对我来说有点奇怪(给 repo 方法一个 sql 连接)

有没有一种优雅的方法来解决这个问题?

4

1 回答 1

1

花了很多时间来解决这个问题,我能够实现这一点的唯一方法是传递以下类的对象

io.vertx.reactivex.sqlclient.SqlConnection

这工作非常顺利。

于 2021-12-17T18:33:38.553 回答