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
为什么会这样,我做错了什么?
--
我使用常见的 sql 驱动程序 (http://vertx.io/docs/vertx-sql-common) 和 vertx 3.4.1
您看到的是连接的内部状态。当前的实现使用 2 个标志控制事务性:
- 在交易中
- 是自动提交
调用方法后最后一个翻转:
conn.rxSetAutoCommit(false);
但这在内部作为 NOOP 处理。只有当调用之后事务才会启动,第一个flag才会改变。
请记住,这是客户端的内部状态,并且 can/will 将来会在异步驱动程序中实施适当的事务隔离级别时发生变化,其中已经存在未决 pull request。
如果你想看到它工作,基本上在你的代码中发出一个 SQL 语句,例如:
conn.rxSetAutoCommit(false).rxExecute("SELECT ...")
如果您再次检查,您会发现这两个标志现在都为真,而且您的服务器上有一个 运行 事务。
我正在尝试做一个简单的 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
为什么会这样,我做错了什么?
--
我使用常见的 sql 驱动程序 (http://vertx.io/docs/vertx-sql-common) 和 vertx 3.4.1
您看到的是连接的内部状态。当前的实现使用 2 个标志控制事务性:
- 在交易中
- 是自动提交
调用方法后最后一个翻转:
conn.rxSetAutoCommit(false);
但这在内部作为 NOOP 处理。只有当调用之后事务才会启动,第一个flag才会改变。
请记住,这是客户端的内部状态,并且 can/will 将来会在异步驱动程序中实施适当的事务隔离级别时发生变化,其中已经存在未决 pull request。
如果你想看到它工作,基本上在你的代码中发出一个 SQL 语句,例如:
conn.rxSetAutoCommit(false).rxExecute("SELECT ...")
如果您再次检查,您会发现这两个标志现在都为真,而且您的服务器上有一个 运行 事务。