1

我不太确定这个问题是否与此有关,r2dbc-postgresql但现在它只发生在 R2DBC 连接中,而不是使用 JDBC 的 Liquibase ...

我们的小型项目有 3 个集成测试,它们使用 Testcontainer 运行 PostgreSQL 来支持存储库。在我们的公司集群上构建项目时,我们注意到有时某些测试会失败,因为 R2DBC 连接localhost/0:0:0:0:0:0:0:1:<container_exposed_port>被拒绝。请注意,所有 3 个测试都依赖于数据库访问,当我们重复构建时,它们中的每一个在某些运行中都失败了,即,在某些构建中,所有 3 个测试都通过了;在某些版本中,只有测试 1 失败,但 2 和 3 通过;在某些版本中,只有测试 2 失败,但 1 和 3 通过;在某些构建中,测试 1 和 2 失败但 3 次通过,等等。当一个测试失败时,其他测试仍然运行并且可能通过。

我们已经进行了一些调试,发现 innetstat -a -n --tcp提示 only0.0.0.0:<container_exposed_port>正在被监听,而不是:::<container_exposed_port>.

在将集成测试的系统属性设置为首选 IPv4 堆栈后,问题就消失了,即

task integrationTest(type: Test) {
    // ...
    systemProperties = ['java.net.preferIPv4Stack': true] as Map<String, Object>
}

我在这里感到困惑的是,为什么在未设置 IPv4 首选项时,只有一些测试失败。另外,为什么 JDBC 连接不会发生这种情况。

4

0 回答 0