2013-06-12 34 views
1

如果我在一個環境中的grails中有一個列表環境變量,我該如何修改它在其他環境中的級聯?在Grails配置中,如何訪問其他環境中的變量?

舉例來說,在我的石英配置添加以下,

quartz { 
    // other variables remove for clarity 

    whiteListedJobs = [ Job1.class, Job2.class, Job3.class ] 
} 

石英是不針對任何單一的環境。但在我的環境特定的配置中,我想重寫此列表以包含更多的作業在某些環境中。

喜歡的東西,

environments { 
    development { 
     quartz { 
      whiteListedJobs = whiteListedJobs + Job4.class 
     } 
    } 
} 

但不幸的是,這並不工作。我的代碼試圖讀取石英配置變量作爲列表拋出Cannot cast object '{}' with class 'groovy.util.ConfigObject' to class 'java.util.List',這表明它不工作。

這樣做的正確方法是什麼?

回答

1

問題是groovy ConfigSlurper沒有提供在解析過程中讀取不同級別的配置條目的方法。然而,它解析爲一個Groovy腳本,所以你可以使用本地變量,以避免完全重寫條目:

def defaultJobs = [ Job1.class, Job2.class, Job3. class ] 
quartz { 
    whiteListedJobs = defaultJobs 
} 

environments { 
    development { 
     quartz { 
      whiteListedJobs = defaultJobs + Job4.class 
     } 
    } 
} 
+0

謝謝,請問這defaultJobs變量正確清理? –

+1

我不是那麼正確,但是因爲它是Config腳本的局部變量,所以它在解析後超出了範圍,並且不包含在配置對象中。 (例如,'grailsApplication.config.defaultJobs'不會被填充) – codelark