使用grails插件数据源

时间:2013-12-10 18:02:26

标签: grails grails-plugin

我正在使用Grails 2.2.4构建一个插件。该插件是一个访问管理器,需要访问一些数据源(多个)。正如Grails手册在Providing Basic Artefacts中指定的那样, DataSource.groovy 未与插件捆绑在一起。

有没有办法将插件DataSource.groovy文件中定义的数据源“复制”到使用该插件的应用程序的DataSource.groovy文件?

我真的不想在每个使用该插件的应用程序上手动定义插件数据源。

============

完整的堆栈跟踪(在评论中请求)

2013-12-11 11:39:33,055 ERROR org.codehaus.groovy.grails.web.context.GrailsConte
xtLoader - Error initializing the application: groovy.lang.MissingMethodExceptio
n: No signature of method: portal.Aplicacao.methodMissing() is applicable for ar
gument types: () values: []
org.codehaus.groovy.runtime.InvokerInvocationException: groovy.lang.MissingMetho
dException: No signature of method: portal.Aplicacao.methodMissing() is applicab
le for argument types: () values: []
        at grails.util.Environment.evaluateEnvironmentSpecificBlock(Environment.
java:308)
        at grails.util.Environment.executeForEnvironment(Environment.java:301)
        at grails.util.Environment.executeForCurrentEnvironment(Environment.java
:277)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExec
utor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor     .java:908)
        at java.lang.Thread.run(Thread.java:662)
Caused by: groovy.lang.MissingMethodException: No signature of method: portal.Ap
licacao.methodMissing() is applicable for argument types: () values: []
        at portal.PortalService.criaAplicacaoNoPortal(PortalService.groovy:233)
        at BootStrap$_closure1.doCall(BootStrap.groovy:16)
        ... 8 more

1 个答案:

答案 0 :(得分:5)

您可以使用platform-core plugin,然后在插件的doWithConfig部分中将dataSources定义为应用程序配置,如下所示:

def doWithConfig = { config ->

    // ...

    application {
        Environment.executeForCurrentEnvironment {
            development {
                    dataSource_myDatasource {
                        dbCreate = "create-drop"
                        url = "jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000"
                        // other datasource configuration here...
                    }
                }
            }
            test {
                    dataSource_myDatasource {
                        // test datasource
                        dbCreate = "create-drop"
                        url = "jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000"
                        // ...
                    }
                }
            }
        }
    }
}