如何判断应用程序使用了多少个数据库连接?

时间:2015-01-09 00:51:54

标签: grails database-connection gorm

我有一个grails web应用程序,它连接到Postgres数据库。我担心代码会打开多个数据库连接。

如何确定请求期间保存的连接数量?

GORM等有很多魔术,我不知道它是如何管理它的连接的。

1 个答案:

答案 0 :(得分:1)

它由dataSource bean管理,它是javax.sql.DataSource。不幸的是,这个界面非常基础,只有4种方法 - 2个getConnection()方法(一个有一个没有用户名/密码),unwrapisWrapperFor来自其父接口。实际的实现类通常有许多不同的配置和监视方法,但实际上没有任何标准,绝对没有接口。

如果您使用的是最新版本的Grails并且没有重新配置任何内容,则支持实现是Tomcat JDBC Pool,它不依赖于Tomcat,而是由Tomcat提交者编写的。但是,您不能将该bean转换为池实现类,因为Grails将实际的数据源实例包装在两个代理中。幸运的是,“真正的”实例很容易实现 - 依赖 - 在服务中注入dataSourceUnproxied bean或在任何想要查看用法的地方注入:

def dataSourceUnproxied

然后你可以调用它的任何方法(见the Javadoc for what's available

当然不需要Groovy,但是如果你想要IDE自动完成添加这个导入

import org.apache.tomcat.jdbc.pool.DataSource

并投射它并调用方法,例如

DataSource tomcatDataSource = dataSourceUnproxied
log.debug "$tomcatDataSource.active active (max $tomcatDataSource.maxActive, initial $tomcatDataSource.initialSize), $tomcatDataSource.idle idle (max $tomcatDataSource.maxIdle, min $tomcatDataSource.minIdle)"