2012-08-02 69 views
1

环境 - 的Grails 2.0.4,甲骨文11GGrails的2.0数据库连接超时,SockectException

几个不活动的小时之后,从数据库中读取导致产生java.net.SocketException :连接超时。根据其他人提出的解决此问题的建议,我使用属性更新数据源以保持数据库连接处于活动状态。这里有我看着几个解决方案 -

One solution
Another solution

它出现的解决方案包括对数据源的设置适当的值。在我的情况下,涉及2个数据源。我试图做一个会话保持活跃,以避免连接超时。这似乎是通过设置validationQuery属性和testXXX属性来完成的。当需要测试时,运行验证查询。我认为下面的配置会给我想要的结果,但我仍然看到超时。我打开了调试

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

我会期望看到validationQuery运行在一定的时间间隔。基于指定的“6000”ms值,我预计每6秒会看到一次validationQuery。这是数据源规范。我尝试了这两种方式。在“属性”关闭中指定它们并在与“合并”相同的级别指定它们。

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中得到的上下文。在dataSource_secondary指定

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

“CTX” 确实有预期值。任何想法,为什么我仍然得到套接字异常?

回答

0

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

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

相关问题