[英]Defining multiple dataSource in resources.groovy
我试图在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。
不久前,我们从Commons池切换到性能更高的Tomcat JDBC连接池 。 它使用与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'
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.