`
sillycat
  • 浏览: 2552199 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Grails-ConfigSlurper

 
阅读更多
Grails-ConfigSlurper

ConfigSlurper is a utility class within Groovy. ConfigSlurper scripts support native Java types and are structured like a tree.

1. Common Usage
Properties for example:
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

Sample to load the config:
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

And the properties can be changed as follow:
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
    }
}

2. Converting to and from Java properties files
java.util.Properties props = //
def config = new ConfigSlurper().parse(props)
props = config.toProperties()

3. Merging configurations
def config1 = new ConfigSlurper().parse(..)
def config2 = new ConfigSlurper().parse(..)

config1 = config1.merge(config2)

4. Serializing a configuration to disk
Each config object implements the groovy.lang.Writable interface that allows you to write out the config to any java.io.Writer.

def config = new ConfigSlurper().parse(..)

new File("..").withWriter { writer ->
    config.writeTo(writer)
}

5. Special "environments" Configuration
The properties file Sample.groovy is as follow:
sample {
foo = "default_foo"
bar = "default_bar"
}

environments {
development {
sample {
foo = "dev_foo"
}
}
test {
sample {
bar = "test_bar"
}
}
}

The loading of the properties:
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"

6. How to Config Spring beans
spring configuration in my project
PropertyPlaceholderConfigurer implementation class from spring

<bean id="dataSource" destroy-method="close" 
  class="org.apache.commons.dbcp.BasicDataSource"> 
  <property name="driverClassName" value="${jdbc.driverClassName}"/> 
  <property name="url" value="${jdbc.url}"/> 
  <property name="username" value="${jdbc.username}"/> 
  <property name="password" value="${jdbc.password}"/> 
</bean> 

jdbc.driverClassName=org.hsqldb.jdbcDriver  
jdbc.url=jdbc:hsqldb:hsql:production:9002 
jdbc.username=sa  
jdbc.password=root

ConfigSluper configuration is as follow:
def normalize(s){  
return s.toUpperCase()  
}   
 
jdbc{  
  driverClassName=org.hsqldb.jdbcDriver  
  url=jdbc:hsqldb:hsql:production:9002 
  username=normalize('sa')  
  password=normalize('root')  


And we need to implements a new class named GroovyPlaceholderConfigurer
package com.sillycat.easywebflow.core;

import groovy.util.ConfigObject;
import groovy.util.ConfigSlurper;

import java.io.IOException;
import java.util.Properties;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
import org.springframework.core.io.Resource;

public class GroovyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {

private Resource[] locations;

protected void loadProperties(Properties props) throws IOException {
ConfigObject configObject = new ConfigObject();
ConfigSlurper configSlurper = new ConfigSlurper();
for (Resource location : locations) {
configObject.merge(configSlurper.parse(location.getURL()));
}
props.putAll(configObject.toProperties());
}

public void setLocations(Resource[] locations) {
this.locations = locations;
}

public void setLocation(Resource location) {
this.locations = new Resource[] { location };
}

}

<bean class="com.sillycat.easywebflow.core.GroovyPlaceholderConfigurer">
<property name="ignoreResourceNotFound" value="true" /> 
  <property name="locations"> 
    <list> 
      <value>classpath:config.groovy</value> 
      <value>classpath:config.properties</value> 
      <value>classpath:config2.groovy</value> 
    </list> 
  </property> 
</bean> 

The latest config2.groovy will overwrite the config.groovy/config.properties from my testing during merging process. But we need to change the style of config file content as follow:
//################################################
//# velocity path
//################################################
velocity.file.path="file://d:/work/easy/easywebflow"

references:
http://groovy.codehaus.org/ConfigSlurper
http://jroller.com/0xcafebabe/entry/using_groovy_configslurper_to_configure



分享到:
评论

相关推荐

    grails-fck-editor-0.3.zip_grails_grails-fck-editor

    标题中的"grails-fck-editor-0.3.zip_grails_grails-fck-editor"表明这是一个与Grails框架相关的插件,具体来说是FCKeditor的一个版本。FCKeditor是一款广泛使用的开源富文本编辑器,它允许用户在网页上创建和编辑...

    Groovy&Grails - 指南.ppt

    在 `grails-app/domain` 创建 `User.groovy` 文件定义用户类,然后在 `grails-app/controllers/UserController.groovy` 编写控制器,处理用户的注册、登录等操作。在 `grails-app/views/user` 下创建相应的 GSP 页面...

    groovy-grails-tool-suite-3.6.4.RELEASE-e4.4.2-win32-x86_64.part1

    groovy-grails-tool-suite-3.6.4.RELEASE-e4.4.2-win32-x86_64.part1 共两个压缩包,解压后将扩展名.zip.bak改为.zip再次解压。

    grails-doc-CN-1.0.rar

    `grails-doc-CN-1.0.rar` 文件包含的是 Grails 1.0 版本的中文参考文档,对于那些不熟悉英文文档或者想要深入了解 Grails 的中文用户来说,这是一个极其宝贵的资源。 文档主要涵盖以下几个关键知识点: 1. **...

    groovy-grails-tool-suite-3.6.4.RELEASE-e4.4.2-win32-x86_64.part2

    groovy-grails-tool-suite-3.6.4.RELEASE-e4.4.2-win32-x86_64.part2 共两个包,解压后需要将扩展名.zip.bak改名为.zip重新解压。 http://dist.springsource.com/release/STS/3.8.1.RELEASE/dist/ e4.6/spring-tool-...

    grails-datastore-gorm-plugin-support-2.0.4.RELEASE.zip

    总之,"grails-datastore-gorm-plugin-support-2.0.4.RELEASE.zip"提供了一个宝贵的资源,让开发者有机会学习和实践Grails的ORM功能和Android的MVC设计模式。无论是对Grails框架的探索,还是对Android开发的深化,这...

    grails-quartz-0.4.1

    在`Grails` 中,`Grails-Quartz` 插件提供了集成`Quartz` 的能力,使得开发者可以在`Grails` 应用中方便地安排和执行周期性任务。 **1. QuartzGrailsPlugin.groovy** 这个文件是`Grails` 插件的核心配置文件,其中...

    grails-core源码

    在解压后的`grails-core-master`目录中,我们可以看到Grails的核心模块组织结构。通常,一个开源项目的源码结构反映了它的设计思路和功能划分。`src/main/groovy`包含了主要的源代码,`src/test/groovy`用于存放测试...

    grails-2.3.6.zip

    Grails是一种基于Groovy语言的开源Web应用框架,它构建在Spring Boot之上,旨在提高开发者的生产力和灵活性。Grails 2.3.6是该框架的一个特定版本,发布于2014年,提供了许多改进和新特性,旨在优化开发流程。 1. *...

    grails 中文文档+grails-fckeditor-0.9.5.zip插件

    本文将深入探讨Grails的中文文档以及“grails-fckeditor-0.9.5”插件的相关知识点。 一、Grails框架基础 1. Groovy语言:Grails的基础是Groovy,这是一种面向对象、动态类型的编程语言,语法简洁且与Java高度兼容...

    grails-2.5.6

    Grails是一套用于快速Web应用开发的开源框架,它基于Groovy编程语言,并构建于Spring、Hibernate等开源框架之上,是一个高生产力一站式框架。 Grails这个独特的框架被视为是提升工程师生产效率的动态工具,因为其...

    grails-web-url-mappings-2.5.4.zip

    这个名为"grails-web-url-mappings-2.5.4.zip"的压缩包包含了Grails 2.5.4版本中的Web URL映射相关代码,让我们深入探讨这一关键组件。 Grails是一个基于Groovy语言的全栈式Java web框架,其设计理念是“简洁、生产...

    grails-4.0.3.rar

    Grails 4 ships with the following dependency upgrades: Groovy 2.5.6 GORM 7 and Hibernate 5.4 (now the default version of Hibernate for new applications) Spring Framework 5.1.5 Spring Boot 2.1.3 ...

    grails-docs-2.0.0

    `grails-docs-2.0.0`是Grails 2.0.0版本的官方文档,包含了丰富的指南、API参考以及国际化资源,对于学习和掌握Grails 2.0.0至关重要。 首先,`index.html`是文档的主页,通常会包含目录、介绍性内容以及如何开始的...

    grails-spring-websocket

    grails-spring-websocket ils子 2.4.x 3.2.7+ 2.5.x 4.0.0+ 安装 要将插件安装到Grails应用程序中,请将以下行添加到build.gradle依赖项部分: implementation "org.grails.plugins:grails-spring-websocket:...

    grails-docs-1.0

    《Grails框架API文档详解——基于grails-docs-1.0》 Grails是一种基于Groovy语言的开源Web应用框架,它简化了Java开发,提供了丰富的功能和强大的工具,深受开发者喜爱。本文将深入探讨grails-docs-1.0版本的API...

    grails-acegi-0.2.1.zip

    本文将详细探讨“grails-acegi-0.2.1.zip”这个插件,它是Grails框架中用于实现权限管理的Spring插件的一个早期版本。 Acegi Security是Spring框架的一个扩展,它提供了一套全面的、灵活的安全性解决方案。在Grails...

    Grails-2.4.4-用户手册

    2. **创建新项目**:通过`grails create-app`命令创建项目,理解`grails-app`目录结构。 3. **编写Domain Class**:学习如何定义领域类,包括关系映射和验证规则。 4. **创建Controller**:了解如何创建控制器,处理...

    grails-acegi-0.5.zip

    4. `docs`、`grails-app`、`src`、`scripts`和`lib`目录则分别包含了插件的文档、应用代码、源代码、脚本以及依赖的库文件。 Grails Acegi 0.5插件提供了以下主要功能: - **用户认证**:支持多种认证机制,如...

Global site tag (gtag.js) - Google Analytics