2014-11-01 84 views
1

我想从外部配置文件中读取一个字符串,但由于某种原因只能获取一个空对象。下面是配置文件(DirectoryConfig.groovy)Grails配置文件返回空对象,而不是字符串

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

这检索目录(从控制器)的代码:

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

出于某种原因,dirName总是最终被"{}",并作为文件的结果不能被读取。我在这里做错了什么?

+0

无关你的问题的详细信息 - 你应该使用/,而不是\\甚至与Windows; JDK类根据需要进行转换。只有在写入一个文件时才会使用\\,该文件将由非Java应用程序在Windows中读取 – 2014-11-02 00:42:12

回答

3

在您的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在classpath源例如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

+1

尝试了上述三个步骤,仍然以相同的值结束。 – aftrumpet 2014-11-02 13:53:13

相关问题