如何在Quarkus Reactive Postgres Client中修改事务隔离级别
解决方案
需求可实现,共有两种可选实现方式,具体操作如下:
方式1:为单个事务单独指定隔离级别(推荐)
如果仅需要部分事务使用READ_UNCOMMITTED隔离级别,可使用withTransaction的重载方法,传入TransactionOptions参数指定隔离级别即可:
- 首先引入必要类:
import io.vertx.mutiny.sqlclient.TransactionOptions; import io.vertx.sqlclient.IsolationLevel;
- 构造配置并调用事务方法:
// 构造事务配置,指定隔离级别 TransactionOptions txOptions = TransactionOptions.create() .setIsolationLevel(IsolationLevel.READ_UNCOMMITTED); // 传入配置执行事务 pgClient.withTransaction(txOptions, transaction -> { // 此处编写你的DQL/DML业务逻辑,所有操作都运行在指定隔离级别的事务中 return transaction.query("你的查询语句").execute() .chain(result -> { // 后续事务操作 }); }) .subscribe().with( success -> /* 事务提交成功后的逻辑 */, fail -> /* 事务回滚后的异常处理逻辑 */ );
方式2:全局配置默认事务隔离级别
如果所有事务都需要使用READ_UNCOMMITTED隔离级别,可直接在项目的application.properties配置文件中添加如下配置,无需修改业务代码:
quarkus.datasource.reactive.transaction-isolation-level=READ_UNCOMMITTED
注意:PostgreSQL数据库自身的实现中,
READ_UNCOMMITTED隔离级别的实际行为和READ_COMMITTED完全一致,数据库内核不支持脏读特性,如果你的需求是实现脏读,需要额外评估该数据库特性的影响。
内容的提问来源于stack exchange,提问作者Ahmet K
相关产品推荐
相关产品推荐

