Mysql 连接池和在返回时释放临时表
我正在使用MySQL的 通常,在会话中创建的临时表将保留在该会话中,并在连接关闭时删除。但是,由于我使用的是连接池,在调用Mysql 连接池和在返回时释放临时表,mysql,apache-commons-dbcp,Mysql,Apache Commons Dbcp,我正在使用MySQL的 通常,在会话中创建的临时表将保留在该会话中,并在连接关闭时删除。但是,由于我使用的是连接池,在调用java.sql.connection.close()时,物理连接实际上并没有关闭,因此我发现临时表仍然存在,并影响下一个会话 这会导致数据库上的资源泄漏,因为临时表不会立即释放,并且由于表名冲突而导致名称冲突 直觉上,当我借用一个连接时,我期待着一个干净的记录。如何做到这一点 MySQL似乎没有一个等价物 即使有,我也看不出在连接返回时如何调用它 在返回池时始终关闭物理连
java.sql.connection.close()
时,物理连接实际上并没有关闭,因此我发现临时表仍然存在,并影响下一个会话
这会导致数据库上的资源泄漏,因为临时表不会立即释放,并且由于表名冲突而导致名称冲突
直觉上,当我借用一个连接时,我期待着一个干净的记录。如何做到这一点
- MySQL似乎没有一个等价物
- 即使有,我也看不出在连接返回时如何调用它
- 在返回池时始终关闭物理连接可能会起作用,但我看不出如何配置dbcp2来实现这一点
- 范围界定
- 释放
- 使用MySqlConnection.ClearPool(连接);我可以工作。
对于GET_LOCK()、MySqlConnection,我也有类似的问题。ClearPool(连接)可以解决此问题。“返回池时始终关闭物理连接可能会起作用”…这是一个矛盾,不是吗?如果连接已关闭,则不会返回池。您可以通过发出查询
rollbackrelease来尝试强制池释放db连接代码>这几乎肯定会做你想做的事情,但是副作用会很有趣,而且池变得有点毫无意义。基本上,对于池,您的代码必须确保它自己进行初始化,在创建表之前删除临时表(如果存在…
),等等。