2013-06-12 33 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