Grails配置文件返回空对象而不是字符串

时间:2014-11-01 19:05:33

标签: grails groovy config

我正在尝试从外部配置文件读取一个字符串,但由于某种原因只获得一个空对象。这是配置文件(DirectoryConfig.groovy)

directory {
    logDirectory = "c:\\opt\\tomcat\\logs\\"
}

检索目录的代码(来自控制器):

String dirName = grailsApplication.config.directory.logDirectory
File directory = new File(dirName)

出于某种原因,dirName总是最终成为"{}",因此无法读取该文件。我在这里做错了什么?

1 个答案:

答案 0 :(得分:3)

DirectoryConfig.groovy目录中创建grails-app/conf/将不符合惯例。

您应该考虑实施建议用于外部化Grails配置的解决方案 - 从类路径或文件系统提供.groovy.properties文件。查看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"]

提供依赖于运行时属性的配置文件是非常常见的方法:

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

我经常使用这样的东西(它是Config.groovy文件的一部分):

grails.config.locations = []
grails.project.config.type = "classpath"
grails.project.config.extension = "groovy"

environments {
    development {
        grails.project.config.file = "development-config.${grails.project.config.extension}"
    }
    test {
        grails.project.config.file = "test-config.${grails.project.config.extension}"
    }
}

if (System.properties["grails.config.type"]) {
    grails.project.config.type = System.properties["grails.config.type"]
}
if (System.properties["grails.config.file"]) {
    grails.project.config.file = System.properties["grails.config.file"]
}

grails.config.locations << "${grails.project.config.type}:${grails.project.config.file}"

默认情况下,它假设有例如classpath中的development-config.groovy文件,但我可以通过在Java运行时设置-Dgrails.config.file=/etc/development.properties -Dgrails.config.type=file来简单地更改它,因此它使用/etc/development.properties文件而不是默认文件。

如果您想以最简单的方式运行示例,则必须执行以下操作:

1)将您的DirectoryConfig.groovy放入类路径源中,例如src/java(注意:如果您将文件放在src/groovy

,它就无法使用

2)在Config.groovy中定义:

grails.config.locations = [
        "classpath:DirectoryConfig.groovy"
]

3)重新运行您的申请。 grailsApplication.config.directory.logDirectory现在应该返回您期望的值。

有关外部化配置的更多信息,请转至http://grails.org/doc/latest/guide/conf.html#configExternalized

相关问题