2016-12-28 71 views
5

释放临时表我使用MySQL的temporary tablesconnection pooling连接池,并在返回

通常情况下,在会话留在该会话中创建并在连接关闭被删除临时表。但是,由于我使用的是连接池,并且在调用java.sql.Connection.close()时物理连接并未实际关闭,所以我发现临时表停留并影响下一次会话。

这将导致资源泄漏的DB,因为临时表不立即释放,以及名称的冲突,由于冲突的表名。

直观地说,我期待一个干净的石板,当我借的连接。如何实现这一目标?

从临时表

除此之外,这个问题也影响:

+0

* * ...这是在用词上矛盾性“返回到池时可以工作,务必关闭物理连接”,不是吗?如果连接关闭,则不会回到池中。你可以试着通过发出查询'ROLLBACK RELEASE'强制池释放数据库连接;'这几乎肯定会做你正在做的事情,但副作用将是有趣的,池化成为有点没意义。从根本上讲,在创建表之前,您的代码必须确保它自己进行初始化,“DROP TEMPORARY TABLE IF EXISTS ...”,等等。 –

回答

0

使用MySqlConnection.ClearPool(连接)的;能行得通。 我对GET_LOCK()有类似的问题,MySqlConnection.ClearPool(连接)可以解决这个问题。