我正在使用Grails应用程序,我必须访问几个数据源.数据源在默认数据库中定义(即它们存储在那里,我必须调用默认数据库来检索我必须准备连接的数据源名称列表).当服务器启动时,我检索数据库列表,创建数据源bean并注入它们.所有动态添加的数据库在结构上都是相同的(即具有相同的表和域对象结构).
这个问题是我最接近一段有用的代码,但它并不是我需要的.
这是我添加它们的方式:
// Register datasource bean
def beanName = 'dataSource_devDB1'
BeanBuilder bb = new BeanBuilder()
bb.beans {
"${beanName}"(BasicDataSource) {
url = "jdbc:h2:devDB1Db;MVCC=TRUE"
pooled = true
driverClassName = "org.h2.Driver"
username = "sa"
password = ""
}
}
bb.registerBeans(grailsApplication.mainContext)
// check that it registered
def ctx = grailsApplication.mainContext
def ctxlist = ctx2.beanDefinitionNames.findAll{it.contains( 'dataSource' )}
log.info "ctxlist = " + ctxlist
Run Code Online (Sandbox Code Playgroud)
这打印:
[dataSource, dataSourceUnproxied, dataSource_devDB1]
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我可以对默认数据源执行操作,就是这样.
Datasource.groovy文件的一部分,那么我可以在所有数据库上执行操作,但不能像文档中所宣传的那样如果我在域对象上执行静态映射,它可以工作:
static mapping = {datasources(['devDB1', 'devDB2', 'DEFAULT')] or …Run Code Online (Sandbox Code Playgroud)