程序崩溃时如何避免连接泄漏

时间:2017-08-24 13:37:29

标签: java oracle swing jdbc plsql

我目前正在编写一个Java应用程序,它严重依赖于JDBC和与Oracle数据库的连接。每当我连接到数据库时,我都会关闭try-catch块的finally块中的连接,以避免连接泄漏。到目前为止这个工作正常。

但是现在我的程序因任何原因而崩溃了。在PLSQL Developer中,我仍然可以观察到一个开放的JDBC瘦客户端连接。我现在的问题是:当我不得不通过任务管理器杀死我的应用程序时,如何关闭JDBC连接?

当然这个崩溃不应该首先发生,但它仍然非常不满意这导致连接泄漏,而且我现在必须告诉DBA手动终止JDBC会话,如果连接太多仍然开放。

1 个答案:

答案 0 :(得分:1)

一旦您丢失了应用程序层和数据库层之间的握手,您将在尝试从应用程序层终止数据库会话时遇到一些严重的困难。

使用提升的权限,您可能会在查询V$SESSION视图并尝试查找挂起的会话时执行一些奇特的操作,以便您可以使用JDBC发送一些kill命令(注意我说可能因为我不能保证JDBC驱动程序中存在这样的命令 - 事实上它可能不存在。但我认为这将是严重的矫枉过正。

我认为更好的选择是使用Oracle的会话管理工具从数据库端解决问题。将您要连接的用户配置文件中的IDLE_TIME参数设置为UNLIMITED以外的其他参数,以便Oracle自动SNIPES(终止)任何在指定时间段内空闲的连接。与你的DBA讨论它,他们应该能够为你设置...这是一个相当简单的调整(但请记住,你还需要RESOURCE_LIMIT数据库参数设置为TRUE任何{ {1}}设置被识别。