【问题标题】:Defining multiple dataSource in resources.groovy在 resources.groovy 中定义多个数据源
【发布时间】:2014-10-03 18:12:21
【问题描述】:

我正在尝试在 DataSource.groovy 中创建多个数据源,例如:

[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 中不起作用。 因此,我使用了另一种替代方法,通过指定 beans 将其移至 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。

【问题讨论】:

    标签: spring grails groovy


    【解决方案1】:

    不久前,我们从 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 beans 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'
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      • 2012-07-04
      • 2012-02-29
      • 2020-10-12
      • 2021-11-25
      相关资源
      最近更新 更多