oracle - Grails 2.0数据库连接超时,SockectException

标签 oracle hibernate grails

环境-Grails 2.0.4,Oracle 11G

几个小时不 Activity 之后,从数据库中读取会导致 java.net.SocketException:连接超时。基于解决该问题的其他建议,我使用属性更新dataSource来保持数据库连接处于 Activity 状态。这是我研究过的几种解决方案-

One solution
Another solution

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

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

我本来希望看到validateQuery以一定的间隔运行。基于指定的“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添加了一些代码来获取上下文。
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中指定的期望值。为什么我仍然会收到套接字异常的任何想法?

最佳答案

找出问题所在。死了的开发人员。我忽略了检入该修补程序,但它没有进入我们的构建环境所引发的 war 。一旦我检查了Datasource.groovy,一切都变得异常了,今天早上我没有看到超时异常。上述解决方案有效。

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

关于oracle - Grails 2.0数据库连接超时,SockectException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11784526/

相关文章:

oracle - ORA-14450 "attempt to access a transactional temporary table alreadyin use"没有自主事务

java - 在 MySQL 集群上使用 JPA/Hibernate 检查外键约束

java - 无状态身份验证是否适用于每用户数据库连接?

grails - 保存时使用Transaction进行Grails回滚

Grails:可序列化的域属性

java - 在 Linux Mint 上安装 SQLDeveloper 4 时找不到 bin/java 或不是有效的 JDK

sql - 只打印列中的最大值

oracle - 从阻止 session 的 oracle 中查找查询

java - 如何从数据库生成对象@Entities?

grails - 用于填充数据库的一次性 grails 脚本