Grails 2.0数据库连接超时,SockectException

时间:2012-08-02 19:32:03

标签: oracle hibernate grails

环境 - Grails 2.0.4,Oracle 11G

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

One solution
Another solution

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

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

我原本希望看到validationQuery在某个时间间隔运行。根据指定的“6000”ms值,我希望每隔6秒看一次validationQuery。这是数据源规范。我试过这两种方式。在“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中指定的预期值。任何想法为什么我仍然得到套接字例外?

1 个答案:

答案 0 :(得分:0)

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

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