配置Grails应用程序以使用JDBC连接池。

9

这篇文章建议Tomcat 7应用程序应该使用JDBC连接池而不是commons-dbcp连接池。然而,后者是Grails应用程序的默认值,而且如何更改它并不明显。

我的猜测是我需要在resources.groovy中定义一个Spring bean来覆盖默认情况下通常创建的bean,但我不知道这个bean应该命名为什么或者我需要设置哪些属性。

2个回答

12
最简单的方法可能是使用jdbc-pool插件。由于此池的配置选项故意与Commons DBCP非常相似(文档在这里),因此您可以使用该插件来定义jar依赖项并管理为您切换类。该插件已经一年没有更新了,所以有点过时(插件使用版本1.0.9.0,但最新版本是1.0.9.3),因此您可能需要定义插件依赖项,排除jar,并添加一个新版本的依赖项。它在ebr仓库中,因此您需要将其添加到BuildConfig.groovy中(请参见插件版本如何执行)。

这里有关于池配置的注释在这里,以及作者写的一系列博客文章在这里

如果你不想使用插件进行配置,可以将ebr仓库和jar依赖项添加到BuildConfig.groovy中:

repositories {
   inherits true
   ...
   ebr()
}

dependencies {
   runtime('org.apache.tomcat:com.springsource.org.apache.tomcat.jdbc:1.0.9.3') {
      transitive = false
   }
}

并且在 resources.groovy 中为 dataSource bean 创建覆盖:

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

beans = {

   dataSource(DataSource) {
      // mandatory
      driverClassName = '${dataSource.driverClassName}'
      username = '${dataSource.username}'
      password = '${dataSource.password}'
      url = '${dataSource.url}'
      // optional
      minEvictableIdleTimeMillis=1800000
      timeBetweenEvictionRunsMillis=1800000
      numTestsPerEvictionRun=3
      testOnBorrow=true
      testWhileIdle=true
      testOnReturn=true
      validationQuery="SELECT 1"
   }
}

使用带有${}占位符的单引号字符串很方便,可以利用Spring的属性占位符功能并使代码DRY,因为您已经在DataSource.groovy中设置了驱动程序和连接信息。


我想我会使用插件。我将发布一个新版本,升级到最新的JDBC连接池库。 - Dónal

3
DataSource.groovy中,我使用以下内容:
environments {
    integration {
        dataSource {
            pooled = false
            jndiName = "java:/comp/env/jdbc/myJndiName"
        }
    }
 }

所有其他内容都由Tomcat定义-它只需要匹配即可。在resources.groovy中不需要定义任何dataSource bean


啊,你的问题没有提到开发模式。 - doelleri
我希望我的开发环境尽可能与生产环境相似,以最小化出现意外的可能性。 - Dónal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接