2012-03-03 65 views
8

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

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

回答

12

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

还有为池here以及作者here一系列博客文章的配置说明。

如果你要在不使用插件的配置这一点,回购和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.groovydataSource豆的覆盖:

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的属性占位符功能,并保持干燥,因为您已经请在DataSource.groovy中设置驱动程序和连接信息。

+0

我想我只是使用插件。我会做一个新版本,升级到最新版本的JDBC连接池库。 – 2012-03-05 10:42:54

3

DataSource.groovy我使用以下命令:

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

和其他一切由Tomcat的定义 - 这只是需要与之相匹配的。没有必要定义任何dataSource bean resources.groovy

+1

在开发模式下运行应用程序时不起作用 – 2012-03-04 21:11:49

+0

啊,你的问题没有提到开发模式。 – doelleri 2012-03-04 22:36:41

+0

我希望我的开发环境尽可能与生产相似,以最大限度地减少潜在的惊喜 – 2012-03-05 10:41:42