Grails:如何从命令行脚本访问应用程序配置?

时间:2011-08-14 06:57:10

标签: grails command-line configuration groovy

我的grails应用程序中需要一个自定义命令行任务,因此我使用grails create-script my-script创建了一个脚本。

从该脚本,我想访问一些应用程序的配置属性。通常,您可以通过grailsApplication.config执行此操作。但是,似乎grailsApplication在命令行脚本的上下文中不可用。以下脚本......

includeTargets << grailsScript("Init")

target(main: "The description of the script goes here!") {
    println  grailsApplication.config.mysetting
}

setDefaultTarget(main)

...收益率(以grails my-script运行时):

groovy.lang.MissingPropertyException: No such property:
                                      grailsApplication for class: MyScript

我也尝试了ConfigurationHolder.config,它只返回null。

那么如何从命令行启动的脚本访问应用程序配置?

3 个答案:

答案 0 :(得分:3)

诀窍是拉入 boostrap目标并依赖它们,如下所示。请注意,应用程序上下文对象在此阶段称为 grailsApp ,而不是grailsApplication

includeTargets << grailsScript('_GrailsBootstrap')

target(main: "The description of the script goes here!") {
    depends checkVersion, configureProxy, bootstrap
    println  grailsApp.config.mysetting
}

setDefaultTarget(main)

您也可以使用run-script命令。这对我不起作用,因为它试图初始化Hibernate会话。我的应用使用mongodb作为主数据存储,requires that you uninstall the Hibernate plugin - 所以运行脚本失败。

答案 1 :(得分:2)

1)请参阅脚本顶部的 _GrailsPackage

includeTargets << grailsScript('_GrailsPackage')

2)取决于 _GrailsPackage

中描述的compile和createConfig目标
target(main: "Your main") {
    depends(compile,createConfig)
    println "My value: ${config.my.config.value}"
}

答案 2 :(得分:1)

我还不能发表评论,所以我发布了答案。

我认为使用snowindy建议的 _GrailsPackage 脚本的解决方案是首选。原因是使用bootstrap实际上引导应用程序,这意味着连接到数据库,执行BootStrap.groovy等。只需使用 _GrailsPackacke 编译 createConfig 依赖项只需要编译运行。

根据您的脚本执行的操作,这可能是您想要的。在我的例子中,我生成了一些可以通过Config.groovy中的设置自定义的SQL脚本,因此启动应用程序只会减慢速度。

干杯, 本