簡體   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