Grails从环境文件访问属性

时间:2011-08-10 15:48:59

标签: grails properties autowired

在我的Config.groovy中,我按以下方式合并属性文件:

grails.config.locations << "file:${userHome}/environment.properties" << "file:${userHome}/passwords.properties"

我有两个问题:

  1. 在服务层自动装配时,使用GrailsApplication我可以检索Config.groovy中定义的属性,但不能检索文件中定义的属性
  2. 我无法在我的工作中使用GrailsApplication自动装配(使用Quartz插件)
  3. 有人可以解释这些问题吗?

2 个答案:

答案 0 :(得分:2)

我所做的是拥有一个外部Config.groovy文件,例如:MyConfig.groovy

在标准grails Config.groovy文件的末尾,我有以下内容:

def ENV_NAME = "MY_EXTERNAL_CONFIG"
if(!grails.config.locations || !(grails.config.locations instanceof List)) {
    grails.config.locations = []
}
if(System.getenv(ENV_NAME)) {
    grails.config.locations << "file:" + System.getenv(ENV_NAME)
} else if(System.getProperty(ENV_NAME)) {
    grails.config.locations << "file:" + System.getProperty(ENV_NAME)
} else {
    println "No external Configs found."
}

所以现在你可以在生产环境中的任何地方(例如)拥有一个MyConfig.groovy文件,然后在启动tomcat之前将环境系统变量设置为指向该文件(或将其作为参数传递给startup.sh):

MY_EXTERNAL_CONFIG="/home/tomcat/configs/MyConfig.groovy"
export MY_EXTERNAL_CONFIG

就是这样。现在您有一个外部MyConfig.groovy文件。其中的属性可以从您的grails应用程序访问,因为它们是标准Config.groovy

的一部分
import org.codehaus.groovy.grails.commons.*
//... 
ConfigurationHolder.config.foo.bar.hello

答案 1 :(得分:0)

尝试这个怎么样!(只是一个猜测,它应该没有任何区别!但请试一试,让我知道如果不起作用!)

grails.config.locations = [ "file:${userHome}/environment.properties",
                            "file:${userHome}/passwords.properties" ]