Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 程序崩溃时如何避免连接泄漏_Java_Oracle_Swing_Jdbc_Plsql - Fatal编程技术网

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

Java 程序崩溃时如何避免连接泄漏,java,oracle,swing,jdbc,plsql,Java,Oracle,Swing,Jdbc,Plsql,我目前正在编写一个Java应用程序,它严重依赖于JDBC和到Oracle数据库的连接。无论何时连接到数据库,我都会关闭try-catch块的finally块中的连接,以避免连接泄漏。到目前为止,这一切都很顺利 但现在我的程序因为任何原因崩溃了。在PLSQLDeveloper中,我仍然可以观察到一个开放的JDBC瘦客户机连接。我现在的问题是:当我必须通过任务管理器终止应用程序时,如何关闭JDBC连接 当然,这个崩溃本来就不应该发生,但仍然很令人不满意的是,这导致了连接泄漏,现在我不得不告诉DBA手

我目前正在编写一个Java应用程序,它严重依赖于JDBC和到Oracle数据库的连接。无论何时连接到数据库,我都会关闭try-catch块的finally块中的连接,以避免连接泄漏。到目前为止,这一切都很顺利

但现在我的程序因为任何原因崩溃了。在PLSQLDeveloper中,我仍然可以观察到一个开放的JDBC瘦客户机连接。我现在的问题是:当我必须通过任务管理器终止应用程序时,如何关闭JDBC连接


当然,这个崩溃本来就不应该发生,但仍然很令人不满意的是,这导致了连接泄漏,现在我不得不告诉DBA手动终止JDBC会话,如果仍有太多连接处于打开状态。

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

有了提升的权限,您可能可以在查询
V$SESSION
视图并尝试查找挂起的会话时做一些奇特的事情,这样您就可以使用
JDBC
发送一些kill命令(注意,我说可能是因为我不能保证JDBC驱动程序中存在这样的命令,事实上它可能不存在)。但我认为那将是严重的过度杀伤力


我认为更好的选择是使用Oracle的会话管理工具从数据库端解决这个问题。在要连接到的用户配置文件中,将
IDLE\u TIME
参数设置为
UNLIMITED
以外的内容,以便Oracle自动
SNIPES
(终止)在指定时间段内处于空闲状态的任何连接。和你的DBA讨论一下,他们应该可以为你设置这个。。。这是一个相当简单的调整(请记住,您还需要将
RESOURCE\u LIMIT
数据库参数设置为
TRUE
,以便识别任何
IDLE\u TIME
设置。

谢谢,与DBA讨论这一点确实是一个好主意。唯一的问题可能是,每当我的程序在公司之外运行时(这是一个API测试工具,可能会让我们的客户感兴趣),他们将面临同样的问题,并将不得不对其数据库进行同样的调整,这可能会使他们对程序的稳定性产生怀疑^^^我不会太担心发送错误的信号。设置
空闲时间
是一种很好的连接池做法,尤其是当您有大量用户时一组用户打开连接,然后离开他们的机器而不关闭程序,同样可以很容易地使数据库陷入困境。