【问题标题】:Grails 2.0 Database Connection Timeout, SockectExceptionGrails 2.0 数据库连接超时,SockectException
【发布时间】:2012-07-31 20:11:30
【问题描述】:

环境 - Grails 2.0.4,Oracle 11G

在几个小时不活动后,从数据库读取会导致 java.net.SocketException: Connection timed out。根据其他人提出的解决此问题的建议,我使用属性更新数据源以保持数据库连接处于活动状态。这是我看过的几个解决方案-

One solution
Another solution

似乎解决方案涉及在数据源上设置适当的值。就我而言,涉及 2 个数据源。我正在尝试进行会话保持活动,以避免连接超时。这似乎是通过设置 validationQuery 属性和 testXXX 属性来完成的。当需要测试时,将运行验证查询。我认为下面的配置会给我想要的结果,但我仍然看到超时。我加快了调试速度

debug 'org.hibernate'
debug 'jdbc.sqlonly'

我本来希望validationQuery 会在某个时间间隔运行。根据指定的“6000”毫秒值,我希望每 6 秒看到一次验证查询。这是数据源规范。我尝试了这两种方法。在“properties”闭包中指定它们,并将它们指定在与“pooled”相同的级别。

dataSource_secondary {
    logSql = true
    pooled = true
    properties {
        maxActive = 5
        maxIdle = 5
        minIdle = 3
        initialSize = 5
        minEvictableIdleTimeMillis = 6000
        timeBetweenEvictionRunsMillis = 6000
        maxWait = 1000
        testOnBorrow = true
        testWhileIdle = true
        testOnReturn = false
        validationQuery = "select 1 from dual"
    }
}

我还在调试器中运行了它,并向 BootStrap.groovy 添加了一些代码来获取上下文。

def ctx = servletContext.getAttribute(ApplicationAttributes.APPLICATION_CONTEXT)
println 'Added a println allowing me to set a break point and inspect the context.'

“ctx”确实具有 dataSource_secondary 中指定的预期值。任何想法为什么我仍然收到套接字异常?

【问题讨论】:

    标签: oracle hibernate grails


    【解决方案1】:

    找出问题所在。脑死开发者。我忽略了签入修复程序,它没有进入我们的构建环境创建的战争。签入 Datasource.groovy 后,一切都很正常,今天早上我没有看到超时异常。上述解决方案有效。

    我仍然很困惑,为什么在验证查询运行时我没有看到调试消息。有谁知道正确的 log4j 条目来查看日志中的validationQuery?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-25
      • 2011-10-19
      • 2013-06-20
      相关资源
      最近更新 更多