我有一个grails/groovy web-app与数据库连接池.设置如下:
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
Run Code Online (Sandbox Code Playgroud)
我正在使用java-melody进行诊断和监控,并注意到一些奇怪的行为.例如,在执行查询DB的作业时,连接可以克服maxActive属性.为什么这甚至可能?
我是否需要明确关闭Grails连接?该作业调用一个服务方法,通过withCriteria Grails调用简单地执行数据库查询,如:
def activities = WorkActivity.withCriteria{
eq("workCategoryActive", true)
order("id", "desc");
}
Run Code Online (Sandbox Code Playgroud)
并且似乎每次运行时,都会打开2个新连接,并且它们不会每次都正常关闭.
此外,在每个页面刷新时,都有一些调用后端来执行查询,有时即使刷新2个新连接似乎也会打开.
我是Grails dev的新手,所以我不知道我是否必须/甚至可以通过Criteria数据库连接来关闭它.
任何一点帮助表示赞赏.数据库是PGSQL.
编辑:好的,所以现在我正在看java-melody中的线程诊断,看起来Tomcat池清理器处于等待状态,这就是为什么连接数没有下降?此外,似乎每次运行该作业时,2个线程都会启动,而其中一个线程会等待等待?这到底是怎么回事.