首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Grails连接池-连接没有关闭?

Grails连接池-连接没有关闭?
EN

Stack Overflow用户
提问于 2018-07-20 15:22:47
回答 1查看 1.1K关注 0票数 6

我有一个带有数据库连接池的grails/groovy web-app。这些设置如下所示:

代码语言:javascript
复制
dataSource:
        url: "jdbc:postgresql://192.168.100.53:5432/bhub_dev"
        properties:
          jmxEnabled: true
          initialSize: 5
          maxActive: 25
          minIdle: 5
          maxIdle: 15
          maxWait: 10000
          maxAge: 600000
          timeBetweenEvictionRunsMillis: 5000
          minEvictableIdleTimeMillis: 60000
          validationQuery: SELECT 1
          validationQueryTimeout: 3
          validationInterval: 15000
          testOnBorrow: true
          testWhileIdle: true
          testOnReturn: false
          jdbcInterceptors: ConnectionState
          defaultTransactionIsolation: 2 # TRANSACTION_READ_COMMITTED

我正在使用java-melody进行诊断和监控,并注意到一些奇怪的行为。例如,在执行查询数据库的作业时,连接可以跨越maxActive属性。为什么这是可能的呢?

我需要显式关闭Grails连接吗?该作业调用一个服务方法,该方法仅通过withCriteria Grails调用执行DB查询,如下所示:

代码语言:javascript
复制
def activities = WorkActivity.withCriteria{
     eq("workCategoryActive", true)
     order("id", "desc");
}

似乎每次运行它时,都会打开2个新连接,但它们并不是每次都正确关闭。

此外,在每次页面刷新时,都会有一些对执行查询的后端的调用,有时甚至在刷新时也会打开2个新连接。

我是Grails dev的新手,所以我甚至不知道是否必须/可以关闭这个withCriteria数据库连接。

任何一点的帮助都是非常感谢的。数据库为PGSQL。

编辑:好的,现在我在java-melody中查看线程诊断,看起来Tomcat池清理器处于等待状态,这就是连接计数没有下降的原因?而且,似乎每次运行该作业时,都会启动两个线程,其中一个线程会陷入等待状态?见鬼到底发生了什么。

EN

回答 1

Stack Overflow用户

发布于 2018-07-30 22:40:51

你应该看看连接池是如何工作的,连接基本上不会关闭,它们是重复使用并打开的。因此,当达到最大值(在您的情况下为50)时,连接将等待空闲。这就是工作,因为开放连接是一项复杂的工作。关于docs,他们说连接是关闭的,这意味着它会回到池中,但不要关闭。The same but more description

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51437196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档