我正在解决连接到PostgreSQL数据库的Spring Boot应用程序的问题。该应用程序正常运行,但在相当适中的负载下,它将开始记录这样的错误:
java.sql.SQLException: Timeout after 30000ms of waiting for a connection.
这是在连接到PostgreSQL RDS的Amazon EC2实例上运行的。该应用程序配置如下:
spring.datasource.url=jdbc:postgresql://[rds_path]:5432/[db name]
spring.datasource.username=[username]
spring.datasource.password=[password]
spring.datasource.max-active=100
在AWS控制台中,我看到有60个连接活动到数据库,但这是几个Spring Boot应用程序(不是所有这个应用程序)。当我使用pg_stat_activity查询数据库中的当前活动时,我看到除了一个或两个处于空闲状态的连接之外的所有连接。看起来Spring Boot应用程序没有使用所有可用的连接?或者以某种方式泄漏连接?我试图解释pg_stat_activity如何显示如此多的空闲连接,并且应用程序仍然会使连接池超时。
答案 0 :(得分:0)
想出来。 Spring正在使用Hikari数据库连接池(直到更仔细地检查堆栈跟踪之后才意识到)。 Hikari配置参数具有不同的名称,用于设置您使用最大池大小的池大小。更新了问题并解决了问题。