繁体   English   中英

Vertx PostgreSQL交易

[英]Vertx PostgreSQL Transactions

我正在尝试做一个简单的SQL事务,但是不幸的是我无法使其正常工作。

我现在正在做什么:

protected Single<SQLConnection> tx() {
  return PostgreSQLClient.createShared(getVertx(), SqlUtil.getConnectionData())
    .rxGetConnection().map((SQLConnection conn) -> {

    conn.rxSetAutoCommit(false);

    return conn;
  });
}

从我从阅读文档中了解的内容来看,这应该足够了吗?

当我检查conn我看到:

inTransaction = false

isAutoCommit = true

为什么会这样,我在做什么错呢?

-

我在vertx 3.4.1中使用了通用的sql驱动程序( http://vertx.io/docs/vertx-sql-common

您看到的是连接的内部状态。 当前的实现使用两个标志来控制事务性:

  • 交易中
  • isAutoCommit

调用方法后,最后一个翻转:

conn.rxSetAutoCommit(false);

但这在内部作为NOOP处理。 仅在事务开始后执行调用并且第一个标志将更改时。

请记住,这是客户端的内部状态,将来可能/将在异步驱动程序中实现适当的事务隔离级别(将来已经有未决的拉取请求)时更改。

如果您希望它正常工作,请在您的代码中基本上发出一条SQL语句,例如:

conn.rxSetAutoCommit(false).rxExecute("SELECT ...")

如果再次检查,则两个标记现在都为true,并且服务器上有正在运行的事务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM