如何在Grails脚本中访问服务?

时间:2014-05-19 19:42:51

标签: grails

关于create-script / run-script的文档很少,所以我想知道是否可以在grails脚本中注入/使用域类。 在普通的Grails课程中,我可以注入一项服务:

def我的服务

但是我不确定在grails脚本里面会有什么内容

2 个答案:

答案 0 :(得分:1)

在脚本中使用domainClasses:

includeTargets << grailsScript("_GrailsBootstrap")

在顶部

然后在需要访问权限的函数中添加:

depends(bootstrap)

def myDomainClass = grailsApp.classLoader.loadClass("myapp.MyDomainClass")
def myDomainClassList = myDomainClass.list()

Grails 2的权威指南中有很多关于所有这些的信息

答案 1 :(得分:1)

使用Grails 2.4.3时,这是我的完整解决方案:

首先,正如Tai "Error loading plugin manager: TomcatGrailsPlugin" on Grails 2.3 Database Migration中提到的那样,将buildConfig.groovy中的tomcat构建类型更改为编译而不是像这样构建:

compile ':tomcat:7.0.42'

这可以避免“每次运行脚本时都会出现”错误加载插件管理器:TomcatGrailsPlugin“错误。

接下来,创建脚本/ DoSomething.groovy

includeTargets << grailsScript("_GrailsInit")
includeTargets << grailsScript("_GrailsBootstrap")
includeTargets << grailsScript("_GrailsClasspath")

target(main: "An example script that calls a service") {
    depends(bootstrap)

    def someService = appCtx.getBean("someService") // look up the service
    someService.runReportOrSomething() // invoke a method on the service
}

setDefaultTarget(main)

上面的代码会导致整个Grails堆栈初始化,因此将为您设置所有服务,域类等。

最后,要运行它,请执行以下操作:

grails prod do-something --stacktrace -echoOut

您可能会想要“grails run-script scripts / DoSomething.groovy”,但出于任何原因似乎不起作用。