为什么 atomikos 定期 ping pg_prepared_xacts

Why atomikos regularly pinged pg_prepared_xacts

我有 spring 引导应用程序,它在两个数据库 Postgres 中进行更新。我使用 Atomikos 进行分布式事务管理。

我看到我的应用程序每 10 秒在两个数据库中进行一次查询: "SELECT gid FROM pg_prepared_xacts where database = current_database()"

我想知道为什么? atomikos 有一些 属性 用于更改周期吗?例如 1 分钟。如果查询returns一些gid会怎样?

这个问题我在网上查了很多,但是没有找到答案。

我有一些假设,我想知道正确答案。

  1. 为什么 Atomikos ping pg_prepared_xacts?

它调用"recovery scan",目的是在应用失败或应用错误后恢复。因此,在数据库中不会 "orphaned" Atomikos 创建的准备好的交易。

  1. atomikos 有一些属性换周期的吗?

是的,它有:com.atomikos.icatch.recovery_delay。其他有用的属性在这里:JtaProperties

  1. 查询returns一些gid会怎样?

Atomikos 检查返回的 gid 是否在 atomikos 事务日志中并具有状态 "to commit"。如果是这样,他将提交准备事务,否则他将回滚事务。请注意,Atomikos 将处理由他创建的准备交易,而不会处理其他准备交易。