【问题标题】:Defining an alternate connection pool in Grails 2.3.6在 Grails 2.3.6 中定义备用连接池
【发布时间】:2014-11-04 12:14:20
【问题描述】:

我知道,在 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 应用程序中定义自定义连接池?谢谢!

【问题讨论】:

  • 该要点应该适用于任何版本的 Grails。
  • @JoshuaMoore 是的,但可能应该更新它以使用 grails.util.Holders 代替已弃用的单个 Holder 类。
  • @rmlan 同意,但方法还是一样。

标签: grails connection-pooling bonecp hikaricp


【解决方案1】:

更新: 好的,所以您实际上需要告诉 Grails不要 来池化数据源,因为 HikariCP 现在正在处理这个问题。

如果我打开该开关,我会在我的应用程序中看到连接异常。所以改为说:

pooled = false

好的,是的,@Joshua Moore 是对的。

我尝试使用更新的 Grails 方法来做这件事,这是我的 resources.groovy 文件的相关部分。据我了解,Datasource.groovy 中的配置值在运行时被拉入resources.groovy,在确定目标运行时环境(developmenttestproduction)之后。

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 环境几乎相同。谢谢!

【讨论】:

  • 如何加载 Oracle 驱动程序?使用此方法时出现错误。在应用程序运行 resources.groovy 时,似乎没有加载 Oracle 驱动程序。 2016-02-19 09:07:10,767 [localhost-startStop-1] WARN util.DriverDataSource - 未找到使用 driverClassName=oracle.jdbc.OracleDriver 注册的驱动程序,尝试直接实例化。
  • 堆栈跟踪中的另一个错误:无法实例化[com.zaxxer.hikari.HikariDataSource]:构造函数抛出异常;嵌套异常是 com.zaxxer.hikari.pool.HikariPool$PoolInitializationException:池初始化期间出现异常:HikariPool-0 - 连接不可用,请求在 6002 毫秒后超时。
猜你喜欢
  • 2018-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-22
  • 2023-03-30
  • 2016-01-27
  • 1970-01-01
相关资源
最近更新 更多