Mysql 连接池和在返回时释放临时表

Mysql 连接池和在返回时释放临时表,mysql,apache-commons-dbcp,Mysql,Apache Commons Dbcp,我正在使用MySQL的 通常,在会话中创建的临时表将保留在该会话中,并在连接关闭时删除。但是,由于我使用的是连接池,在调用java.sql.connection.close()时,物理连接实际上并没有关闭,因此我发现临时表仍然存在,并影响下一个会话 这会导致数据库上的资源泄漏,因为临时表不会立即释放,并且由于表名冲突而导致名称冲突 直觉上,当我借用一个连接时,我期待着一个干净的记录。如何做到这一点 MySQL似乎没有一个等价物 即使有,我也看不出在连接返回时如何调用它 在返回池时始终关闭物理连

我正在使用MySQL的

通常,在会话中创建的临时表将保留在该会话中,并在连接关闭时删除。但是,由于我使用的是连接池,在调用
java.sql.connection.close()
时,物理连接实际上并没有关闭,因此我发现临时表仍然存在,并影响下一个会话

这会导致数据库上的资源泄漏,因为临时表不会立即释放,并且由于表名冲突而导致名称冲突

直觉上,当我借用一个连接时,我期待着一个干净的记录。如何做到这一点

  • MySQL似乎没有一个等价物
  • 即使有,我也看不出在连接返回时如何调用它
  • 在返回池时始终关闭物理连接可能会起作用,但我看不出如何配置dbcp2来实现这一点
除了临时表之外,此问题还影响:

  • 范围界定
  • 释放

    • 使用MySqlConnection.ClearPool(连接);我可以工作。 对于GET_LOCK()、MySqlConnection,我也有类似的问题。ClearPool(连接)可以解决此问题。

      “返回池时始终关闭物理连接可能会起作用”…这是一个矛盾,不是吗?如果连接已关闭,则不会返回池。您可以通过发出查询
      rollbackrelease来尝试强制池释放db连接这几乎肯定会做你想做的事情,但是副作用会很有趣,而且池变得有点毫无意义。基本上,对于池,您的代码必须确保它自己进行初始化,
      在创建表之前删除临时表(如果存在…
      ),等等。