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