Camunda 数据库连接关闭但被 camunda 引擎选中

Camunda DB connection closed but picked by camunda engine

我们正在使用 RDS/MySql 作为数据库的 camunda。它工作正常,但有时它说 DB 已关闭,因此抛出 ProcessEngine 异常。 这是我从我们的配置和日志中了解到的内容:

  1. 我们的池中随时有 5 个活动连接(在数据源配置中指定)

  2. 曾经有过关闭的场景

  3. 我们看到如下错误:

Request received Context path: /engine-rest Request received Path

Info: /user PathInfo: /user ExceptionHandler:

org.camunda.bpm.engine.ProcessEngineException: Process engine

persistence exception at

org.camunda.bpm.engine.impl.interceptor.CommandInvocationContext.rethrow(CommandInvocationContext.java:148)

    at org.camunda.bpm.engine.impl.interceptor.CommandContext.close(CommandContext.java:173)

    at org.camunda.bpm.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:113)

    at org.camunda.bpm.engine.impl.interceptor.ProcessApplicationContextInterceptor.execute(ProcessApplicationContextInterceptor.java:66)

    at org.camunda.bpm.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:30)

...... Caused by: org.apache.ibatis.exceptions.PersistenceException:

Error querying database. Cause:

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:

No operations allowed after connection closed. The error may exist in

org/camunda/bpm/engine/impl/mapping/entity/User.xml The error may involve

org.camunda.bpm.engine.impl.persistence.entity.UserEntity.selectUserByQueryCriteria

The error occurred while executing a query SQL: select distinct RES.*

from ACT_ID_USER RES

order by RES.ID_ asc LIMIT ? OFFSET ? Cause:

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:

No operations allowed after connection closed.

我们的 tomcat 道具指定:minIdle = 5;

我的最佳猜测:它在服务器上已关闭,但由于上述原因我们正在本地维护 属性。

根据 tomcat 文档 (https://tomcat.apache.org/tomcat-8.0-doc/jdbc-pool.html):

testOnBorrow = true; validationQuery = "select 1";

这两个道具应该在验证连接时修复它。

我想弄清楚的问题:

  1. 如何重现这个问题?除了保持连接空闲几个小时外,发生这种情况的场景。

  2. AWS RDS服务器是否关闭连接?如果有,我们能控制吗?

正如@Zelldon所说,可以减少连接超时,然后我们可以尝试一下。它按预期工作。

为了确定,我 运行 有两个 camunda 实例,一个有此修复,另一个没有。可以看到修复有效。

关于 RDS,它确实关闭了连接,但我找不到任何关于它的文档。