什么时候在Grails中处理grails.config.locations?

时间:2010-07-28 07:08:07

标签: grails properties config war

我正在使用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

简而言之,我对将一些属性注入war文件并使用其值进行操作的正确方法感到困惑。

谢谢,

基因

0 个答案:

没有答案