当我的微服务启动时,我正在使用flyway来创建/更新架构。 在某些情况下,当我启动服务时,会出现以下异常:
Caused by: java.sql.SQLException: Cannot create PoolableConnectionFactory (ERROR: canceling statement due to user request)
at org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:2294) ~[commons-dbcp2-2.1.1.jar:2.1.1]
at org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2039) ~[commons-dbcp2-2.1.1.jar:2.1.1]
at org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1533) ~[commons-dbcp2-2.1.1.jar:2.1.1]
at org.flywaydb.core.internal.jdbc.JdbcUtils.openConnection(JdbcUtils.java:56) ~[flyway-core-5.2.1.jar:na]
... 37 common frames omitted
Caused by: org.postgresql.util.PSQLException: ERROR: canceling statement due to user request
我检查了postgres(9.6)日志,并看到了验证查询和错误消息:
2019-11-13 20:47:49 IST batch 31002 ERROR: canceling statement due to user request
2019-11-13 20:47:49 IST batch 31002 STATEMENT: select 1 as test
我查看了BasicDataSource,并在func validateConnectionFactory(connectionFactory)中引发了Java错误。 我不确定为什么,但是我正在使用的验证查询(选择1作为测试)失败了。我的ValidationQueryTimeout设置为2。
我猜测验证查询会花费更多时间,因为我尝试使用另一个验证查询作为测试(选择pg_sleep(10)),并且得到了完全相同的错误。数据库是否有可能终止此连接?我的系统负载不大,在此流程中它似乎是空闲的,因此资源无法解决问题。