[英]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 )
您看到的是连接的内部状态。 当前的实现使用两个标志来控制事务性:
调用方法后,最后一个翻转:
conn.rxSetAutoCommit(false);
但这在内部作为NOOP处理。 仅在事务开始后执行调用并且第一个标志将更改时。
请记住,这是客户端的内部状态,将来可能/将在异步驱动程序中实现适当的事务隔离级别(将来已经有未决的拉取请求)时更改。
如果您希望它正常工作,请在您的代码中基本上发出一条SQL语句,例如:
conn.rxSetAutoCommit(false).rxExecute("SELECT ...")
如果再次检查,则两个标记现在都为true,并且服务器上有正在运行的事务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.