5
释放临时表我使用MySQL的temporary tables与connection pooling。连接池,并在返回
通常情况下,在会话留在该会话中创建并在连接关闭被删除临时表。但是,由于我使用的是连接池,并且在调用java.sql.Connection.close()
时物理连接并未实际关闭,所以我发现临时表停留并影响下一次会话。
这将导致资源泄漏的DB,因为临时表不立即释放,以及名称的冲突,由于冲突的表名。
直观地说,我期待一个干净的石板,当我借的连接。如何实现这一目标?
- 对于MySQL,似乎没有相应的SQL Server's
sp_reset_connection
。 - 即使有,我看不出dbcp2 can be configured调用它返回的连接时。
- 在返回池时总是关闭物理连接可能会起作用,但我看不出dbcp2如何配置来做到这一点。
除此之外,这个问题也影响:
* * ...这是在用词上矛盾性“返回到池时可以工作,务必关闭物理连接”,不是吗?如果连接关闭,则不会回到池中。你可以试着通过发出查询'ROLLBACK RELEASE'强制池释放数据库连接;'这几乎肯定会做你正在做的事情,但副作用将是有趣的,池化成为有点没意义。从根本上讲,在创建表之前,您的代码必须确保它自己进行初始化,“DROP TEMPORARY TABLE IF EXISTS ...”,等等。 –