我正在尝试在DataSource.groovy中创建多个dataSource:
[1..9].each {
"dataSource_db$it" {
driverClassName = 'oracle.jdbc.OracleDriver'
username = 'xxx${it}xx'
password = 'xxx${it}xx'
url = 'jdbc:oracle:thin:@xxx:xxx:xxx'
}
}
但这不起作用。看起来像groovy代码在DataSource.groovy中不起作用。 因此,我使用另一种方法将bean移动到resources.groovy:
import org.apache.commons.dbcp.BasicDataSource
// Place your Spring DSL code here
beans = {
[1..9].each {
"dataSource_db$it"(BasicDataSource) {
driverClassName = 'oracle.jdbc.OracleDriver'
username = 'xxx${it}xx'
password = 'xxx${it}xx'
url = 'jdbc:oracle:thin:@xxx:xxx:xxx'
}
}
}
但是我遇到了另一个无法识别BasicDataSource的问题。我需要安装哪个插件? 我的方法是否正确? 我使用的是Grails 2.4.3。
答案 0 :(得分:0)
前一阵子我们从Commons池切换到性能更高的Tomcat JDBC Connection Pool。它使用与Commons池大部分相同的语法,因此它具有作为替代品的额外好处,通常不需要除驱动程序类名之外的配置更改。它由Tomcat团队开发,但不需要任何Tomcat依赖项,可以在任何servlet容器中使用。
用于此池实现的类名是org.apache.tomcat.jdbc.pool.DataSource
,因此如果您更改为resources.groovy
中的类名,那么您将解决该问题。
如果您保留DataSource.groovy
版本并运行grails console
,请执行
for (name in ctx.beanDefinitionNames.sort()) {
println name
}
你会发现你最终只得到了一个名字非常奇怪的第二个bean:
dataSource_db[1, 2, 3, 4, 5, 6, 7, 8, 9]
(以及为每个具有类似后缀的DataSource
创建的所有其他辅助bean)。
修复类名后resources.groovy
发生同样的事情;我假设这里的问题是Spring bean DSL处理程序干扰了Groovy代码,否则它将起作用;我能够使用常规for循环:
for (int i = 1; i < 10; i++) {
"dataSource_db$i"(BasicDataSource) {
driverClassName = 'oracle.jdbc.OracleDriver'
username = 'xxx${it}xx'
password = 'xxx${it}xx'
url = 'jdbc:oracle:thin:@xxx:xxx:xxx'
}
}