【问题标题】:Grails app denied connection next dayGrails 应用程序第二天拒绝连接
【发布时间】:2014-08-07 15:58:18
【问题描述】:

我使用 grails 编写了一个 Web 应用程序。它一整天都运行良好,但是当我第二天醒来并检查它时,如果不重新加载它,它将无法正确连接到数据库。 (MySQL)。我感觉好像连接被拒绝了?

这是我的堆栈跟踪:

2014-07-28 13:28:07,103 [http-bio-8081-exec-93] ERROR StackTrace  - Full Stack Trace:
java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
at java.io.BufferedOutputStream.flush(Unknown Source)
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3345)

这是我的数据源:

dataSource {

// Production
driverClassName = "com.mysql.jdbc.Driver"
username = "ROOT"
password = "PASS"
dbCreate = "update"
url = "jdbc:mysql://172.16.1.3/work_orders_v2"
dialect = "org.hibernate.dialect.MySQL5InnoDBDialect"

pooled = true
properties {
    maxActive = 50
    maxIdle = 25
    minIdle = 5
    initialSize = 5
    minEvictableIdleTimeMillis = 60000
    timeBetweenEvictionRunsMillis = 60000
    maxWait = 10000
}

}

我尝试了一些没有影响的事情。你能看出什么奇怪的吗? 谢谢。

【问题讨论】:

    标签: java mysql web-services grails


    【解决方案1】:

    听起来您池中的连接在闲置后被数据库服务器关闭。这是我预期会发生的正常行为。

    如果您添加这些验证设置,池中的连接将在您的代码获取它们之前进行测试。任何关闭的连接都将从池中删除。

    properties {
        maxActive = 50
        maxIdle = 25
        minIdle = 5
        initialSize = 5
        minEvictableIdleTimeMillis = 60000
        timeBetweenEvictionRunsMillis = 60000
        maxWait = 10000
    
        // Connection Validation Settings
        testOnBorrow=true
        testWhileIdle=true
        testOnReturn=true
        validationQuery="SELECT 1"
    }
    

    【讨论】:

      【解决方案2】:

      使用以下适合我的属性。

                  properties {
                  maxActive = -1
                  minEvictableIdleTimeMillis=1800000
                  timeBetweenEvictionRunsMillis=1800000
                  numTestsPerEvictionRun=3
                  testOnBorrow=true
                  testWhileIdle=true
                  testOnReturn=false
                  validationQuery="SELECT 1"
                  jdbcInterceptors="ConnectionState"
               }
      

      【讨论】:

      • 我从来没有搞乱过生产模式。这是我完整的数据源,我使用 grails 命令向导创建一个 war 文件,然后将其部署到 tomcat。有没有一种特殊的方法可以让它生产?不过我看不出这是个问题..
      • 刚刚检查并运行 grials war 会自动将其设置为生产
      • 当然我会试试你的属性,请问为什么max active是-1?
      • 我提供的属性是grails 2.3.5版本生成的默认属性。 maxActive=-1 表示允许池中的无限连接 Active。虽然这些设置我没有遇到任何数据库连接问题,但我不确定这些属性的含义。
      猜你喜欢
      • 2020-09-05
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 2021-01-06
      相关资源
      最近更新 更多