Grails: Как я могу получить доступ к конфигурации приложения из сценария командной строки? - PullRequest
1 голос
/ 14 августа 2011

Мне нужно пользовательское задание командной строки в моем приложении 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, который просто возвращает ноль.

Так как я могу получить доступ к конфигурации приложения из скрипта, запускаемого из командной строки?

Ответы [ 3 ]

3 голосов
/ 14 августа 2011

Хитрость заключается в том, чтобы вытянуть цели 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 в качестве основного хранилища данных, которое требует, чтобы вы удалили плагин Hibernate - поэтому запуск сценария завершился неудачей.

2 голосов
/ 05 марта 2013

1) См. _GrailsPackage в верхней части вашего скрипта:

includeTargets << grailsScript('_GrailsPackage')

2) Зависит от целей compile и createConfig, описанных в _GrailsPackage

target(main: "Your main") {
    depends(compile,createConfig)
    println "My value: ${config.my.config.value}"
}
1 голос
/ 30 января 2015

Я пока не могу написать комментарий, поэтому отправляю ответ.

Я думаю, что решение, использующее сценарий _GrailsPackage , предложенное snowindy, должно быть предпочтительным.Причина в том, что использование bootstrap фактически загружает приложение, что означает подключение к базе данных, выполнение BootStrap.groovy и т. Д. Просто используйте _GrailsPackacke с compile и createConfig зависимостей просто требует запуска компиляции.

Зависит от того, что делает ваш скрипт, это, вероятно, то, что вы хотите иметь.В моем случае я создал несколько сценариев SQL, которые можно настраивать с помощью параметров в Config.groovy, поэтому загрузка приложения просто замедляла процесс.

Приветствия, Бен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...