我有一个grails web应用程序,它连接到Postgres数据库。我担心代码会打开多个数据库连接。
如何确定请求期间保存的连接数量?
GORM等有很多魔术,我不知道它是如何管理它的连接的。
答案 0 :(得分:1)
它由dataSource
bean管理,它是javax.sql.DataSource
。不幸的是,这个界面非常基础,只有4种方法 - 2个getConnection()
方法(一个有一个没有用户名/密码),unwrap
和isWrapperFor
来自其父接口。实际的实现类通常有许多不同的配置和监视方法,但实际上没有任何标准,绝对没有接口。
如果您使用的是最新版本的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)"