我的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。
那么如何从命令行启动的脚本访问应用程序配置?
答案 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脚本,因此启动应用程序只会减慢速度。
干杯, 本