postgresql - 在 JDBC 中关闭后 PostgreSQL 连接仍然空闲
问题描述
我是 SpringBoot 的新手。
我有一个 Spring Boot 应用程序,我使用的数据库是 PostgreSQL,我使用的是 JdbcTemplate,我有 2 个数据源连接。代码工作正常,但我观察到在服务器状态仪表板的 PostgreSQL pgAdmin 中,它显示空闲模式下的连接池(比如 10 连接)。虽然早些时候我使用单个数据源,但我观察到了同样的事情,但我通过在 application.properties 文件中设置一些属性来解决它。例如:
spring.datasource.hikari.minimum-idle=somevalue
spring.datasource.hikari.idle-timeout=somevalue
如何使用多个数据源实现相同的目标。
属性文件
spring.datasource.jdbcUrl=jdbc:postgresql://localhost:5432/stsdemo
spring.datasource.username=postgres
spring.datasource.password=********
spring.datasource.driver-class-name=org.postgresql.Driver
spring.seconddatasource.jdbcUrl=jdbc:postgresql://localhost:5432/postgres
spring.seconddatasource.username=postgres
spring.seconddatasource.password=********
spring.seconddatasource.driver-class-name=org.postgresql.Driver
数据库配置
@Configuration
public class DbConfig {
@Bean(name="db1")
@Primary
@ConfigurationProperties(prefix="spring.datasource")
public DataSource firstDatasource()
{
return DataSourceBuilder.create().build();
}
@Bean(name = "jdbcTemplate1")
public JdbcTemplate jdbcTemplate1(@Qualifier("db1") DataSource ds) {
return new JdbcTemplate(ds);
}
@Bean(name="db2")
@ConfigurationProperties(prefix="spring.seconddatasource")
public DataSource secondDatasource()
{
return DataSourceBuilder.create().build();
}
@Bean(name="jdbcTemplate2")
public JdbcTemplate jdbcTemplate2(@Qualifier("db2") DataSource ds)
{
return new JdbcTemplate(ds);
}
}
解决方案
这是可以预料的。
“关闭”close()
从 am pool 获得的连接(即调用)只会将其返回到池中。池不会立即关闭与数据库的物理连接以避免代价高昂的重新连接(这是使用连接池的重点)
在 Postgres 中,“空闲”连接也不是真正的问题。
如果您的连接长时间处于“事务空闲”状态,那将是一个问题。
推荐阅读
- hadoop-yarn - taskmanager 在取消失败的任务时被杀死
- mysql - MySQL DELETE 语句在大表中非常慢
- android - 使用 ViewModel 同时更新所有片段数据
- python - PyGame 绘制一个空白窗口直到退出
- python - Python raspberry pi - 如何将 RAM 内存视为文件
- xamarin.forms - Xamarin 表单 - 网格上的 IsClipedToBounds 不起作用。子视图仍在裁剪
- apache-nifi - NIFI PutHDFS 无法写入内容
- oauth-2.0 - 谷歌开放ID连接
- javascript - Javascript:返回 Chrome 控制台中突出显示的所有文本
- reactjs - 无法在 Untappd Business API 的数组上使用 .map()