【问题标题】:grails oracle connection timeoutgrails oracle 连接超时
【发布时间】:2015-06-22 18:19:02
【问题描述】:

我在 grails 中有以下数据源配置。

dataSource_staging_oracle {
    dbCreate = "none"
    pooled = true
    url = "jdbc:oracle:thin:@//my-box-oracle.com:1521/DB1"
    driverClassName = "oracle.jdbc.OracleDriver"
    username = "USER_1"
    password = "encryptedpassword"
    passwordEncryptionCodec = PropertiesCodec
}
dataSource_prod_oracle {
    dbCreate = "none"
    pooled = true
    autoReconnect = true
    url = "jdbc:oracle:thin:@//my-oracle-prod-box.com:1521/DB2"
    driverClassName = "oracle.jdbc.OracleDriver"
    username = "user_2"
    password = "encrypted_password"
    passwordEncryptionCodec = PropertiesCodec
}

应用程序能够获取数据库连接并正常工作。但是,经过 1-2 小时的处理后,我看到了连接关闭异常。

错误 util.JDBCExceptionReporter - 已关闭连接

我相信这与数据源配置属性有关。哪些 grails 设置可以帮助我刷新连接?我已经将autoReconnectpooled 设置为true

我使用 grails 2.3.3

【问题讨论】:

  • 您确定要专注于 Grails,而不是尝试解决连接在 1-2 小时后断开的初始问题吗?
  • @christopher 在 grails 领域,数据源属性不是决定如何获取连接、保留多长时间、池化等吗?我希望我的配置中缺少一些可以帮助我刷新连接的东西。它是我从应用程序中创建的只读 Oracle 查询。
  • 我明白,但没有 Grails 配置显示“两小时后,默认终止此连接”。您必须指定这一点。所以它有点暗示有一些潜在的原因导致断开连接。

标签: grails grails-orm


【解决方案1】:

数据源属性将告知数据库中间件服务器对数据库的期望。如果您的 Oracle 服务器不同意 Grails 想要使用的设置,那么有时会出现神秘的错误消息。

使用池连接告诉 Oracle 保持为应用程序打开的连接数。如果应用程序运行 1-2 小时并持续处理,我预计池可能会用完有效连接。对于一些背景,请查看下面包含的链接。

查看Grails configuration docs,第 4.4 节,了解高级数据源配置选项。您是否定义了验证查询? (例如select 1 from dual;

查看此 AskTom 帖子以获得对 connection pooling 的清晰解释。

Previous StackOverflow question 与 MySQL 但类似的错误。

【讨论】:

    【解决方案2】:

    以下配置帮助我解决了我的问题。

    dataSource_staging {
                dbCreate = "none"
                pooled = true
                autoReconnect = true
                url = "jdbc:oracle:thin:@//my-box-oracle.com:1521/DB1"
                driverClassName = "oracle.jdbc.OracleDriver"
                username = "USER_1"
                password = "encryptedpassword"
                passwordEncryptionCodec = PropertiesCodec
                properties {
                    validationQuery = "SELECT 1 FROM DUAL"
                    testOnBorrow = true
                    testWhileIdle = true
                    testOnReturn = false
                    timeBetweenEvictionRunsMillis = 5000
                    minEvictableIdleTimeMillis = 60000
                    maxAge = 10 * 60000
                    maxWait = 10000
                    maxIdle = 25
                    maxActive = 50
                    initialSize = 5
                }
            }
    

    【讨论】:

      猜你喜欢
      • 2013-10-27
      • 2014-09-24
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      • 1970-01-01
      相关资源
      最近更新 更多