2012-03-03 88 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