Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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 是否在设置的超时时间后关闭JDBC连接?_Java_Jdbc_Connection_Connection Pooling_Connection Timeout - Fatal编程技术网

Java 是否在设置的超时时间后关闭JDBC连接?

Java 是否在设置的超时时间后关闭JDBC连接?,java,jdbc,connection,connection-pooling,connection-timeout,Java,Jdbc,Connection,Connection Pooling,Connection Timeout,有没有办法在设置的超时时间后关闭JDBC连接?正在GenericObject池中创建这些连接。我知道池可以关闭池中的空闲连接,但是对于被认为是活动的连接呢?如果有人不调用close(),我将尝试控制连接泄漏。从我所读到的内容来看,唯一的方法可能是在服务器上设置一个超时时间,但我希望在Java中找到一种方法。谢谢大家! 我同意Peter Lawrey的观点,我会确保始终关闭连接。但是,如果我仍然必须确保连接已关闭(如果有人从池中取出连接并忘记返回),我将按如下方式执行: 修饰池返回的java.sq

有没有办法在设置的超时时间后关闭JDBC连接?正在GenericObject池中创建这些连接。我知道池可以关闭池中的空闲连接,但是对于被认为是活动的连接呢?如果有人不调用close(),我将尝试控制连接泄漏。从我所读到的内容来看,唯一的方法可能是在服务器上设置一个超时时间,但我希望在Java中找到一种方法。谢谢大家!

我同意Peter Lawrey的观点,我会确保始终关闭连接。但是,如果我仍然必须确保连接已关闭(如果有人从池中取出连接并忘记返回),我将按如下方式执行:

  • 修饰池返回的java.sql.Connection
  • 在构造函数中创建一个计时器,并将其设置为配置的持续时间,以允许使用活动连接
  • 如果用户在计时器启动之前调用close,我将取消计时器并返回到池的连接
  • 如果计时器在用户关闭连接之前触发,我将返回到池的连接并使修饰的连接无效,以便进一步调用将抛出
    IllegalStateException

  • 我使用的是旧的ApacheCommons池,但我切换到了新的Apache池,它实际上有一个功能,可以在超时后删除连接


    RemoveBandoned-(布尔)标志,用于删除超过RemoveBandonedTiMout的废弃连接。如果设置为true,则连接被视为已放弃,并且如果其使用时间超过RemoveBandonedTimeout,则可以从无法关闭连接的应用程序中恢复db连接。另请参阅日志。默认值为false。

    我会确保您正确关闭资源。试图解决这个问题可能会隐藏更严重的问题。你能详细说明一下吗:“如果有人不调用close()”。我想他的意思是程序员忘记调用
    close()
    在连接上。请注意,
    Glassfish
    中有
    泄漏超时
    泄漏回收
    连接池高级设置。如果连接在
    泄漏超时
    秒后未返回到池,则会自动返回到池(如果
    泄漏回收
    已启用)。是的,activeConnectionTimeout已成为连接池中的一个coomon可配置参数。谢谢你关于GlassFish的信息谢谢你的想法。我会调查的。你们是对的,打电话给close是最好的解决方案。