Когда grails.config.locations обрабатывается в Grails? - PullRequest
2 голосов
/ 28 июля 2010

Я использую Grails 1.2.1 и хотел бы указать внешние файлы конфигурации (свойств) для файла war для моего приложения.Из документации я понимаю, что правильный способ сделать это - указать список

grails.config.locations

в файле Config.groovy.Однако, когда я это делаю, свойства, которые должны быть установлены, недоступны для программы (например, в DataSource.groovy).Когда эти свойства установлены?

Я хотел бы загрузить внешние файлы свойств и затем выполнить проверку некоторых параметров, прежде чем сделать их доступными для остальной части программы.Я также хочу использовать эти значения параметров для настройки ведения журнала и источников данных.

Когда вышеупомянутый подход не работал, я также попытался загрузить их вручную, выполнив что-то вроде этого:

List locations = []

def systemConfig = System.getenv(ENV_NAME)
def cmdlineConfig = System.getProperty(ENV_NAME)

if (systemConfig) {
    println "Including configuration file specified in environment: " + systemConfig;
    locations << systemConfig
}

if(cmdlineConfig) {
    println "Including configuration file specified on command line: " + cmdlineConfig;
    locations << cmdlineConfig
}

if (!systemConfig && !cmdlineConfig)
    println "WARNING: No external configuration file defined."

locations.each { String loc ->
    File f = new File(loc)
    if (!f.exists())
        println "WARNING: File ${f.absolutePath} not found"
    else {      
        try {
            def configSupport = null
            if (loc.endsWith('.properties')) {
                Properties props = new Properties();
                props.load(f.newReader());
                println "Parsed properties file: $props"
                configSupport = new ConfigSlurper().parse(props)
            }
            else
                configSupport = new ConfigSlurper().parse(f.toURI().toURL() )
            assert configSupport != null
            println "Loaded ${loc}: $configSupport"
            grails.config = grails.config.merge(configSupport)
            println "config is now: ${grails.config}"
        }
        catch( Exception ex ) {
            println "ERROR: could not parse $loc: $ex.message"
        }
    }
}

Хотя grails.config был настроен правильно, это не отразилось на остальной части кода.Кроме того, это явно неправильно, поскольку мне нужно иметь возможность ссылаться на grails.somepropname, а не на grails.config.grails.somepropname

Короче говоря, я не совсем понимаю, как правильно добавить некоторые свойства в мойВоенный файл и сделайте что-нибудь со своими значениями.

Спасибо,

Gene

...