2011-09-13 99 views
1

我已經將下面的代碼添加到我的Config.groovy文件中,但是,儘管如此,我無法訪問Config.groovy文件中的外部配置屬性。使用外部配置文件

有沒有人可以在Config.groovy文件中訪問外部配置文件的屬性?

if (System.getProperty("CONFIG")) { 
    grails.config.locations << "file:" + System.getProperty("CONFIG") 
} else { 
    grails.config.locations << "file:./${appName}-config.properties" 
} 

注:我使用${...}試圖像我會在Spring配置文件,ConfigurationHolder.configgrailsApplication訪問屬性,但這些方法都沒有工作。

謝謝。

+0

你會得到什麼樣的錯誤?這是做到這一點的正確方法。 這兩種方法不起作用,或者只有您從系統屬性中獲取的方法? –

+0

@奧利弗泰恩斯:我沒有得到任何錯誤;問題是我無法訪問Config.groovy文件**中的外部屬性文件**中設置的任何屬性。看來我可以使用系統屬性和硬編碼值將屬性文件添加到* grails.config.locations *。 – kin1

回答

0

我想這會造成混亂,因爲配置文件被加載的順序。我非常肯定Config.groovy在加載時,外部的還沒有加載。

所以你的「CONFIG」屬性是在外部文件中設置的,它是你想要加載的文件的名稱?

我通常如何做這只是列出我可以使用的所有文件。

grails.config.locations = [ 
     "file:../app-config/myapp-dataSource.groovy", 
     "file:../app-config/myapp-config.groovy" 
] 

environments { 
    development { 
    grails.config.locations = [ 
      "file:../myapp-config/myapp-dataSource.groovy", 
      "file:../myapp-config/myapp-config.groovy", 
      "file:${userHome}/myapp-config/myapp-dataSource.groovy", 
      "file:${userHome}/myapp-config/myapp-config.groovy" 
    ] 
    } 
... 
} 

如果這些文件不存在,他們只是跳過。我相信這些文件是按順序加載的,因此$ {userHome}目錄中的任何內容都會覆蓋之前設置的值。這對開發很有用,因爲你可以通過機器本地方式來改變設置,而不必擔心這些配置更改被檢入。

+0

我面臨的問題是,加載* .properties文件時,* .properties文件中的值不會覆蓋以前設置的值。 – kin1

0

@Nick Larson, 你提到的有關CONFIG未加載的內容不是真實的。如果CONFIG是JVM參數,則使用-DCONFIG = xxxx進行設置,然後在config.groovy啓動前設置它。

@ Kin1, 您正在使用file:protocol訪問屬性文件。您是否試圖在WAR或EAR文件中訪問它,或者它是基於文件的系統。 在WAR或EAR文件中,您需要使用classpath:對於文件,file:不起作用。另外,你必須確保在類路徑中實際複製Groovy文件(不是編譯的類文件)。我們在WAR創建事件上執行它,並且構建過程將配置文件複製到一個類路徑位置中。

希望這會有所幫助。

0
Add the below line in config.groovy 

grails.config.locations = [ "classpath:grails-app-config.properties"] 

environments { 
    development { 
     grails.logging.jul.usebridge = true 
     grails.config.locations = ["file:C:\\conf\\externalfile.groovy"] 
    } 
    production { 
     grails.logging.jul.usebridge = false 
     grails.config.locations = ["file:/opt/config/externalfile.groovy"] 
     // TODO: grails.serverURL = "http://www.changeme.com" 
    } 
} 

If you want to access any property from external configuration(config.groovy) then just declare the property like 

property = property value eg:(ImagePath = "C:\\Users\\Saved Pictures") 

access it like grailsApplication.config."property" 

eg:(grailsApplication.config.ImagePath) 

NOTE: dont use def just a property and its value.