我正在尝试将 HikariCP JDBC 池与 QuestDB 一起使用,而不是像这样的 PostgreSQL:
public static void main(String[] args) {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:postgresql://localhost:8812/qdb");
config.setUsername("admin");
config.setPassword("quest");
config.setMaxLifetime(60000);
config.setMaximumPoolSize(10);
// Create the DataSource
HikariDataSource dataSource = new HikariDataSource(config);
while (true) {
// Use the DataSource to get a connection
try (Connection connection = dataSource.getConnection();
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT now()")) {
// Process the result
while (resultSet.next()) {
System.out.println(resultSet.getString(1));
}
} catch (SQLException e) {
e.printStackTrace();
}
Os.sleep(10000);
}
}
我的依赖项是
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.3</version>
</dependency>
看起来工作正常,我可以查询数据库,但我在 QuestDB 日志中看到,59 秒后某些东西会关闭所有池连接,如下所示
2024-09-24T11:09:26.276729Z I pg-server connected [ip=127.0.0.1, fd=2241972929959]
...
2024-09-24T11:10:24.950787Z I pg-server scheduling disconnect [fd=2241972929959, reason=15]
2024-09-24T11:10:24.951148Z I pg-server disconnected [ip=127.0.0.1, fd=2241972929959, src=queue]
如何将 HikariCP 与 QuestDB 结合使用,以便池连接保持打开状态,并且仅从池中逐出关闭/无效的连接?
它这样做是因为您配置了
config.setMaxLifetime(60000);
,它将连接的生命周期限制为 60 秒。这意味着 60 秒或更长时间前创建且当前未从池中检出的连接将自动关闭。对于对比,默认值为 1800000
(30 分钟)。
换句话说,删除
setMaxLifetime
设置,或者至少将其设置得更高。