非同期リスナーのために、postgresql をpgjdbc-ng (0.8.9) に接続しようとしています。開発中はすべて正常に動作しますが、SIT 環境で接続タイムアウトが発生しました。
SIT には postgresql 13 サーバーがあり、クライアントを強制的に ssl で接続し、tls 1.3 のみを使用します。
コードは次のとおりです。
@Bean
public PGConnection getPGConnection() throws SQLException {
var connectionString = String
.format("jdbc:pgsql://%s/%s?ssl.mode=require", host, database);
return DriverManager
.getConnection(connectionString, user, password)
.unwrap(PGConnection.class);
}
そして、ここにスタックトレースの出力があります:
Cause by: java.io.IOException: Timeout starting connection
at com.impossibl.postgres.protocol.v30.ServerConnectionFactory.startup
...
上記のコードからの接続のみがタイムアウト エラーになるため、混乱します。Spring Data JAP(PostgreSQL JDBC Driver) の他の接続は、同じアプリケーションで同時に完全に正しいです。そして最悪なのは自分の環境では再現できないことです。
アプリケーションは1.0.1のopensslバージョン(tls 1.3はサポートされていません)で動作する必要があるため、最初はtlsプロトコルバージョンについてだと思いました。しかし、他の接続が適切に機能しているためではありません。
別の例外をスローするため、postgres ユーザーの接続制限から拒否されなかったことはわかっています。そして、次のような接続を取得するために別の方法を使用しようとしました:
var dataSource = new PGDataSource();
dataSource.setUrl("jdbc:pgsql://host/dbname");
dataSource.setUser(user);
dataSource.setPassword(password);
dataSource.setSslMode(SSLMode.Require.name());
var conn = dataSource.getConnection().unwrap(PGConnection.class);
同じ結果になり、開発に取り組み、SIT環境で失敗しました。
似たような経験をした人はいますか?
または、DBA などに何を確認すればよいか教えてくださいpg_hba.conf
。
ありがとうございました。