繁体   English   中英

在resources.groovy中定义多个dataSource

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM