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

时间:2012-03-03 23:14:21

标签: grails jdbc groovy datasource tomcat7

This article建议Tomcat 7应用程序应该使用JDBC连接池而不是commons-dbcp连接池。但是,后者是Grails应用程序的默认设置,并且如何更改它并不明显。

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

2 个答案:

答案 0 :(得分:12)

最简单的方法可能是使用jdbc-pool插件。由于此池的配置选项与Commons DBCP(它们记录为here)非常相似,因此您可以使用该插件定义jar依赖关系并管理为您切换类。该插件在一年内没有更新,所以它有点过时了(插件使用版本1.0.9.0但是latest is 1.0.9.3)所以你可能想要定义不包括jar的插件依赖项,并添加一个for较新的版本。它位于ebr回购中,因此您需要将其添加到BuildConfig.groovy中(请参阅plugin's version了解他是如何做到的)。

here有一些配置说明,作者here有一系列博客文章。

如果您确实想在不使用插件的情况下进行配置,请将ebr repo和jar依赖项添加到BuildConfig.groovy

repositories {
   inherits true
   ...
   ebr()
}

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

并在dataSource中为resources.groovy 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中设置了驱动程序和连接信息。

答案 1 :(得分:3)

DataSource.groovy我使用以下内容:

environments {
    integration {
        dataSource {
            pooled = false
            jndiName = "java:/comp/env/jdbc/myJndiName"
        }
    }
 }

其他一切都是由Tomcat定义的 - 这只需要匹配它。无需在resources.groovy

中定义任何dataSource bean
相关问题