在Grails 2.3.6中定义备用连接池

时间:2014-09-10 18:15:32

标签: grails connection-pooling bonecp hikaricp

我知道,在Grails 1.X和Grails 2.X之间的某个时刻,默认连接池库已从commons-dbcp更改为tomcat-dbcp

现在,我尝试将BoneCP或HikariCP配置为Grails应用程序的连接池库。

但是,我发现this answer提供的解决方案可能只适用于Grails 1.X。

我还找到了this Gist,但同样,我也不知道它适用于哪个Grails版本。

那么,是否可以在Grails 2.3.6应用程序中定义自定义连接池?谢谢!

1 个答案:

答案 0 :(得分:7)

更新确定,因此您实际上需要告诉Grails 而不是来汇集数据源,因为HikariCP现在正在处理这个问题。

如果我打开开关,我在应用程序中看到连接怪异。所以请说:

pooled = false

好的,@Joshua Moore是对的。

我尝试使用更新的Grails方法,这是我的resources.groovy文件的相关部分。据我所知,在确定目标运行时环境(Datasource.groovyresources.groovy或{{development之后,test中的配置值会在运行时被提取到production。 1}})。

def config = Holders.config
def dataSources = config.findAll {
  it.key.toString().contains("dataSource_")
}

dataSources.each { key, value ->
  def ds = value
  "${key}"(HikariDataSource, { bean ->

     def hp = new Properties()
     hp.username = ds.username
     hp.password = ds.password
     hp.connectionTimeout = 6000
     hp.maximumPoolSize = 60
     hp.jdbcUrl = ds.url
     hp.driverClassName = ds.driverClassName

     HikariConfig hc = new HikariConfig(hp)
     bean.constructorArgs = [hc]
  })
}

这是我的DataSource.groovy配置的相关部分:

// environment specific settings
environments {
   development {
      dataSource_myapp1 {
         pooled = false
         username = "CONFIGURE_ME_EXTERNALLY"
         password = "CONFIGURE_ME_EXTERNALLY"
         driverClassName = 'oracle.jdbc.OracleDriver'
         dialect = 'org.hibernate.dialect.Oracle10gDialect'
         url = 'jdbc:oracle:thin:@MYDBHOST1:1521/MYSERVICEID1'
      }
      dataSource_myApp2 {
         pooled = false
         username = "CONFIGURE_ME_EXTERNALLY"
         password = "CONFIGURE_ME_EXTERNALLY"
         driverClassName = 'oracle.jdbc.OracleDriver'
         dialect = 'org.hibernate.dialect.Oracle10gDialect'
         url = 'jdbc:oracle:thin:@MYDBHOST2:1521/MYSERVICEID2'
      }
   }
}

就我而言,testproduction环境几乎相同。谢谢!