gpt4 book ai didi

java - 从 jOOQ 事务访问 JDBC 连接

转载 作者:行者123 更新时间:2023-11-30 08:07:31 26 4
gpt4 key购买 nike

是否可以从 jOOQ TransactionRunnableTransactionCallable 访问底层的 JDBC 连接?

我希望能够访问您从连接中获取的 PostgreSQL 大对象 API:

final LargeObjectManager manager = connection.unwrap(PGConnection.class).getLargeObjectAPI();

Afaict 你只能访问 ConnectionProvider,如果我调用 aquire(),看起来我不会以相同的连接结束对于我的 LOB 和我的陈述。

最佳答案

在 jOOQ 3.7 中,#4552实现后允许通过 ConnectionRunnable 访问 ConfigurationConnection .例如:

DSL.using(configuration)
.transaction((Configuration c) -> {
DSL.using(c).connection(connection -> {
LargeObjectManager manager = connection.unwrap(PGConnection.class).getLargeObjectAPI();
// ...
});
});

为了方便起见,此 API 将在内部调用 acquire()release(),因此以下解决方案等效但更冗长:

DSL.using(configuration)
.transaction((Configuration c) -> {
Connection connection = c.connectionProvider().acquire();
try {
LargeObjectManager manager = connection.unwrap(PGConnection.class).getLargeObjectAPI();
// ...
}
finally {
c.connectionProvider().release(connection);
}
});

因为 Connection 是从“transacted”Configuration c 获得的,所以您可以确定您将访问正确的 Connection。即使您多次访问它,它也始终与 jOOQ 在内部将您自己的 ConnectionProvider 替换为作用于事务处理的 ConnectionDefaultConnectionProvider 相同

关于java - 从 jOOQ 事务访问 JDBC 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33647693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com