我知道,在 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 不是 池数据源,因为 HikariCP 现在正在处理这个。
如果我打开那个开关,我会在我的应用程序中看到连接异常。所以改为说:
pooled = false
好吧,@Joshua Moore 是对的。
我尝试使用更新的 Grails 方法来做这件事,这是我的
resources.groovy
的相关部分。文件。据我了解,Datasource.groovy
中的配置值被拉入 resources.groovy
在运行时,在确定目标运行时环境之后( development
、 test
或 production
)。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'
}
}
}
就我而言,
test
的情况几乎相同。和 production
环境。谢谢!
关于grails - 在 Grails 2.3.6 中定义备用连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25772324/