Grails外部配置文件

时间:2014-02-15 01:04:01

标签: grails

我开始使用现有的Grails项目,这是处理外部配置文件的配置文件(Config.groovy)的一部分:

grails.config.locations = [];

def defaultConfigFile = "${basedir}/configs/BombayConfig.groovy"
def defaultDatasourceFile = "${basedir}/configs/BombayDataSource.groovy"

if(File.separator == "\\") {
    defaultConfigFile = defaultConfigFile.replace('/', '\\')
    defaultDatasourceFile = defaultDatasourceFile.replace('/', '\\')
}

String PROJECT_NAME = "BOMBAY"
String CONFIG_ENV = "${PROJECT_NAME}_CONFIG_LOCATION"
String DATASOURCE_ENV = "${PROJECT_NAME}_DATASOURCE_LOCATION"

def externalConfig = System.getenv(CONFIG_ENV)
def externalDataSource = System.getenv(DATASOURCE_ENV)

if (externalConfig && new File(externalConfig).isFile()) {
    grails.config.locations << "file:" + externalConfig
}
else {
    grails.config.locations << "file:" + defaultConfigFile
}

if (externalDataSource && new File(externalDataSource).isFile()) {
    grails.config.locations << "file:" + externalDataSource
}
else {
    grails.config.locations << "file:" + defaultDatasourceFile
}

我在configs文件夹中有一些默认文件,但在服务器中,正在使用的文件位于:

/home/someusername/configuration/

看起来不像默认路径,并且没有环境变量指向该路径,如配置所示。

我还试图查找链接到其他配置文件夹的configs文件夹,但没有找到任何内容。

我迷失在这里;如何将配置文件指定给Grails?

编辑: 为了澄清事情,服务器正在运行并运行,我只想弄清楚它是如何从上面指定的路径中获取配置文件的。

3 个答案:

答案 0 :(得分:1)

我认为您的意图是使用grails.config.locations []条目。我的Config.groovy

中注释了以下内容
// grails.config.locations = [ "classpath:${appName}-config.properties",    
//                             "classpath:${appName}-config.groovy",
//                             "file:${userHome}/.grails/${appName}-config.properties",
//                             "file:${userHome}/.grails/${appName}-config.groovy"]

所以你不能指定这样的东西:

grails.config.locations = [ "file:${userHome}/configuration" ] 

拾取该文件夹中的文件?

答案 1 :(得分:1)

if(File.separator == "\\") {
    defaultConfigFile = defaultConfigFile.replace('/', '\\')
    defaultDatasourceFile = defaultDatasourceFile.replace('/', '\\')
}

这可能会导致问题 - grails.config.locations URL 的列表,而不是本机文件路径,因此您肯定需要转发,而不是反向斜杠。而是尝试像

这样的东西
File defaultConfigFile = new File(basedir, "configs/BombayConfig.groovy")
// and the same for datasource

// ...
File externalConfig = System.getenv(CONFIG_ENV) ? new File(System.getenv(CONFIG_ENV)) : null

if (externalConfig?.isFile()) {
    grails.config.locations << externalConfig.toURI().toString()
}
else {
    grails.config.locations << defaultConfigFile.toURI().toString()
}

答案 2 :(得分:1)

如果你正在努力与外部配置和你 在Config.groovy

中指定了外部配置
grails.config.locations = []

if(System.properties["${appName}.config.location"]) {
    grails.config.locations << "file:" + System.properties["${appName}.config.location"]
}

if(System.properties["${appName}.datasource.config.location"]) {
    grails.config.locations << "file:" + System.properties["${appName}.datasource.config.location"]
}

您的设置环境就是这样

export GRAILS_OPTS="$GRAILS_OPTS -DAppName.config.location=dev-config/Config.groovy"
export GRAILS_OPTS="$GRAILS_OPTS -DAppName.datasource.config.location=dev-config/DataSource.groovy"

并且开发配置没有被提取,那么你需要在BuildConfig.groovy中查看你的fork设置并将它们关闭如此

grails.project.fork = [
  test: false,
  run: false, 
]

这样,当应用程序分叉时,系统属性不会丢失。