使用外部配置文件

时间:2011-09-13 20:44:32

标签: grails

我已将下面的代码添加到我的Config.groovy文件中,但是,尽管有这个,但我无法访问Config.groovy文件中的外部配置属性。

有没有人可以在Config.groovy文件中访问外部配置文件的属性?

if (System.getProperty("CONFIG")) { 
  grails.config.locations << "file:" + System.getProperty("CONFIG")
} else { 
  grails.config.locations << "file:./${appName}-config.properties"
}

注意:我尝试使用${...},就像我在Spring配置文件ConfigurationHolder.configgrailsApplication中访问属性一样,但这些方法都不起作用。

感谢。

3 个答案:

答案 0 :(得分:0)

我认为这会因配置文件的加载顺序而引起混淆。我很确定在加载Config.groovy的时候,还没有加载外部的。

所以你的“CONFIG”属性是在外部文件中设置的,这是你要加载的文件的名称?

我通常如何做这只是列出我可以使用的所有文件。

grails.config.locations = [
        "file:../app-config/myapp-dataSource.groovy",
        "file:../app-config/myapp-config.groovy"
]

environments {
  development {
    grails.config.locations = [
            "file:../myapp-config/myapp-dataSource.groovy",
            "file:../myapp-config/myapp-config.groovy",
            "file:${userHome}/myapp-config/myapp-dataSource.groovy",
            "file:${userHome}/myapp-config/myapp-config.groovy"
    ]   
  }
...
}

如果文件不存在,则会跳过它们。我认为文件按顺序加载,因此$ {userHome}目录中的任何内容都将覆盖以前设置的值。这对于开发很有用,因为您可以使用机器本地方式更改设置,而不必担心签入这些配置更改。

答案 1 :(得分:0)

@Nick Larson, 你提到的有关CONFIG未加载的内容不正确。如果CONFIG是一个JVM参数,使用-DCONFIG = xxxx设置,则在config.groovy启动之前设置它。

@ KIN1, 您正在使用file:protocol来访问属性文件。您是尝试在WAR或EAR文件中访问它还是基于文件的系统。 在WAR或EAR文件中,您需要使用classpath:对于文件,file:不起作用。此外,您必须确保在类路径中实际复制Groovy文件(不是已编译的类文件)。我们在WAR创建事件上执行此操作,构建过程将配置文件复制到类路径位置之一。

希望这有帮助。

答案 2 :(得分:0)

for (i = 0; i < n; i++) {
    if( scanf("%104s", input) != 1 )
        break; // didn't read a one string, break the loop!
    // I got the input, let's insert it to the tree..
}