Ответ 1
danb находится на правильном пути. Тем не менее, жизнь становится немного легче на ваших пальцах, если вы делаете более приятный импорт:
import org.codehaus.groovy.grails.commons.ConfigurationHolder as CH
println CH.config.grails.serverURL
в Config.groovy Я вижу это:
// set per-environment serverURL stem for creating absolute links
environments {
production {
grails.serverURL = "http://www.changeme.com"
}
}
Каков правильный способ доступа к нему во время выполнения?
danb находится на правильном пути. Тем не менее, жизнь становится немного легче на ваших пальцах, если вы делаете более приятный импорт:
import org.codehaus.groovy.grails.commons.ConfigurationHolder as CH
println CH.config.grails.serverURL
В более поздних версиях grails ConfigurationHolder устарел.
Вместо этого вы должны использовать объект grailsApplication.
grailsApplication.config.grails.serverURL
Если в контроллере или службе используется инъекция зависимостей grailsApplication. например.
class MyController{
def grailsApplication
def myAction() {
grailsApplication.config.grails.serverURL
}
вот он:
import org.codehaus.groovy.grails.commons.ConfigurationHolder
println ConfigurationHolder.config.grails.serverURL
альтернативно, в контроллерах и тэгах, по-видимому, это будет работать:
grailsApplication.config.grails.serverURL
Мне нужно было это в BootStrap, поэтому вариант 1 был тем, что мне нужно.
Как уже упоминалось в нескольких комментариях, другой вариант - это класс grails.utils.Holders
, который был добавлен в Grails 2.0. Я предпочитаю этот подход, так как вы можете использовать его в классах, которые не настроены с помощью инъекции зависимостей.
import grails.util.Holders
class Foo {
def bar() {
println(Holders.config.grails.serverURL)
}
}