ConfigSlurper

ConfigSlurper是Groovy操作配置的一个工具类,通过此类你可以像写Groovy脚本一样来写那些属性文件。但跟常规的Java属性文件不同,ConfigSlurper脚本不仅兼容Java类型的写法,而且还支持树状结构的写法。

以下是一个通过ConfigSlurper脚本来配置Log4j的示例:

log4j.appender.stdout = "org.apache.log4j.ConsoleAppender"
log4j.appender."stdout.layout"="org.apache.log4j.PatternLayout"
log4j.rootLogger="error,stdout"
log4j.logger.org.springframework="info,stdout"
log4j.additivity.org.springframework=false

为了加载这个可读的配置,你需要:

def config = new ConfigSlurper().parse(new File('myconfig.groovy').toURL())
 
assert "info,stdout" == config.log4j.logger.org.springframework
assert false == config.log4j.additivity.org.springframework

正如上述示例所示,你可以通过点标识符来访问相关配置并且其返回值是Java类型,比如字符串、布尔类型等

你也可以在配置脚本中使用作用域来避免重复信息,因此上述示例也可以这样写:

log4j {
    appender.stdout = "org.apache.log4j.ConsoleAppender"
    appender."stdout.layout"="org.apache.log4j.PatternLayout"
    rootLogger="error,stdout"
    logger {
        org.springframework="info,stdout"
    }
    additivity {
        org.springframework=false
    }
}

同Java属性文件的相互转换

你可以将ConfigSlurper配置脚本转换成为传统的Java属性文件,比如:

java.util.Properties props = // load from somewhere
 
def config = new ConfigSlurper().parse(props)
 
props = config.toProperties()

合并配置

如果你有多个配置文件,你可以将这些配置对象合并,并且创建一个核心的配置对象,比如:

def config1 = new ConfigSlurper().parse(..)
def config2 = new ConfigSlurper().parse(..)
 
config1 = config1.merge(config2)

序列化配置到磁盘

你可以将一个配置对象序列化到磁盘上,因为每一个配置对象都实现了groovy.lang.Writable接口,故你可以使用任何java.io.Writer接口来写这些配置,如下:

def config = new ConfigSlurper().parse(..)
 
new File("..").withWriter { writer ->
     config.writeTo(writer)
}

特定“环境(environments)”配置

ConfigSlurper除了缺省构造函数以外,还有一个特殊的”environment“参数的构造函数,此构造函数跟属性设置所称谓的”环境(environments)“有关, 这允许在属性文件中有一个缺省的设置,而在适当的环境闭包中又可以替代此设置。有了这个特殊的构造函数,多个相关的配置可以存储在同一个文件中了。

看看如下属性文件:

Sample.groovy
 
 
sample {
     foo = "default_foo"
     bar = "default_bar"
}
 
environments {
     development {
          sample {
               foo = "dev_foo"
          }
     }
     test {
          sample {
               bar = "test_bar"
          }
     }
}

以下是特定配置的演示代码:

def config = new ConfigSlurper("development").parse(new File('Sample.groovy').toURL())
 
assert config.sample.foo == "dev_foo"
assert config.sample.bar == "default_bar"
 
config = new ConfigSlurper("test").parse(new File('Sample.groovy').toURL())
 
assert config.sample.foo == "default_foo"
assert config.sample.bar == "test_bar"

:!:注意: 此environments闭包不能直接解析,如果没有指定特定的environment,此闭包将被忽略。

更多信息

 
wiki/user_guide/configslurper.txt · 最后更改: 2008-04-19 13:50 (外部编辑)
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki