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

标签 grails groovy config

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

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

以及检索目录的代码(从 Controller ):

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

由于某种原因,dirName 总是以 "{}" 结束,因此无法读取该文件。我在这里做错了什么?

最佳答案

按照惯例,在 grails-app/conf/ 目录中创建 DirectoryConfig.groovy 将不起作用。

您应该考虑实现建议用于外部化 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}"

默认情况下,它假设存在例如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

关于Grails 配置文件返回空对象而不是字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26692034/

相关文章:

python - 如何实现tensorflow session 配置

unit-testing - 我可以使Intellij Idea 11 IDE意识到Grails 2.0.x单元测试中的assertEquals和其他JUnit方法吗?

grails - 自定义Grails统计信息

Groovy Grape 处理依赖解析

常规安装

node.js - 为什么我不能在 'localhost' 上收听但我可以在 '127.0.0.1' 上收听?

grails - 如何使用grails通过ajax传递值

Grails save() 失败;不知道为什么

grails - 为什么groovy跳过每个语句

php - 安全的 PHP 数据库配置