如何使用ResetAbandonedTimer来避免因removeAbandonedTimeout而关闭连接

时间:2018-01-29 07:23:34

标签: java sql-server jdbc tomcat7 connection-pooling

我收到Socket关闭异常,案例和原因参考:Getting SQLServerException socket close for one particular method in Java

为了解决这个问题,我根据建议使用了(JdbcInterceptors):WebApp (Tomcat-jdbc) Pooled DB connection throwing abandon exception

谢谢大家,但这个解决方案在我的情况下不起作用, 不过,我收到Socket Closed异常, 我使用过jdbcInterceptors,您可以查看下面的配置......

<Resource
    name="jdbc/dev"
    auth="Container"
    type="javax.sql.DataSource"
    maxActive="100"
    maxIdle="5"
    maxWait="-1"
    driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
    url="jdbc:sqlserver://Localhost:1433;DatabaseName=outingDB"
    username="sa"
    password="local#123"
    removeAbandoned="true"
    removeAbandonedTimeout="30"
    logAbandoned="false"
    abandonWhenPercentageFull="50"
jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer"/>

在我的情况下,我的一个SQL查询需要更多的执行时间然后removeAbandonedTimeout, 因此,Connection正在关闭,它将作为Socket Closed异常抛出。

现在我想重置Abandoned Timer,如果正在使用连接,或者是否有另一种方法来增加数据库的套接字超时。

请给我建议,如果是对或错还是有其他方法可以实现这一目标,请提前谢谢。

1 个答案:

答案 0 :(得分:1)

根据文档,removeAbandonedTimeout值应设置为应用程序可能具有的最长运行查询。因此,请测量执行最长查询并增加此参数的值所需的时间。

来源:https://tomcat.apache.org/tomcat-8.0-doc/jdbc-pool.html#Common_Attributes