java – postgresql错误:由于用户请求取消声明

前端之家收集整理的这篇文章主要介绍了java – postgresql错误:由于用户请求取消声明前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
什么原因导致 postgresql中的这个错误
org.postgresql.util.PsqlException: ERROR: canceling statement due to user request

我的软件版本:

Postgresql 9.1.6 on x86_64-redhat-linux-gnu,由gcc(GCC)4.7.2 20120921(Red Hat 4.7.2-2)64位编译.

我的postgresql驱动程序是:postgresql-9.2-1000.jdbc4.jar

使用java版本:Java 1.7

线索:我的postgresql数据库是在一个固态硬盘驱动器,这个错误发生随机,有时甚至根本没有.

解决方法

我们已经弄清了这个问题的原因.它是通过在最新的JDBC驱动程序9.2-100x中执行setQueryTimeout()来解释的.如果您手动打开/关闭连接可能不会发生,但是通常会在连接池到位并且autocommit设置为false时发生.在这种情况下,setQueryTimeout()应该调用非零值(例如,使用Spring框架@Transactional(timeout = xxx)注释).

事实证明,在语句执行期间发生sql异常时,取消定时器尚未被取消并保持活动(这就是它的实现方式).因为池,连接后面没有关闭,而是返回到池.
之后,当取消定时器触发时,它随机取消当前与该定时器相关联的连接的查询.在这一刻,这是一个完全不同的查询,解释了随机效应.

建议的解决方法是放弃setQueryTimeout()并使用Postgresql配置(statement_timeout).它不提供相同的灵活性,但至少总是有效.

猜你在找的Java相关文章