假设我在某个中心位置创建了一个DSLContext
,并且创建了一个将其作为参数的存储库。我使用ThreadLocalTransactionProvider。现在在代码中的某个时候,我打开一个事务:
// somewhere central, not necessarily on the same thread
val db = DSL.using(...)
val repo = Repo(db)
db.transaction(fun() {
// this runs in the transaction
db.select(....).fetch()
// does this too?
val result = repo.getStuff()
})
我假设每次db请求连接时,jOOQ都会查询ThreadLocalTransactionProvider,如果存在当前事务,该线程会在ThreadLocal变量中进行查找,并确保返回正确的连接。我希望这是它的工作方式,但是没有太多的文档,而且我不想冒错误地进行事务管理的风险。