2014-11-01 82 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

相關問題