我使用了spring jpa(hibernate)atomikos jta事务。在数据库端执行第一个语句后1分钟内连接关闭(自动pgbouncer)。但是Spring事务继续。 第一个查询执行然后调用 ws 或其他工作(1 分钟过去)。然后第二个查询执行 然后抛出异常 不支持事务交错。
如果我使用非 Xa 数据源,则异常是更改 statestaleobjectException ,行已更新另一个事务或已更新(0)..
这是 PostgreSQL 驱动程序中的一个已知限制。在某些情况下会发生这种情况,例如当您在同一事务中重复执行 SQL 调用时。
我不确定您是否有预算,但 Atomikos 免费试用 ExtremeTransactions(该产品的商业版本)包含一个解决方法。
如果有兴趣,您可以在这里申请:http://atomikos.com/Main/ExtremeTransactionsFreeTrial
干杯
我也遇到了同样的问题。原因是 Hibernate 处理 XA 连接的方式(除了 PG 驱动程序限制之外)。这描述了它的工作原理: https://vladmihalcea.com/hibernate-aggressive-connection-release/ 更改 Hibernate release_mode 设置解决了我的问题。