您的位置:首页 > Web前端

配置文件神器 typesafe conf 用法简介

2015-11-26 11:37 1201 查看

项目主页 https://github.com/typesafehub/config
配置文件语法 https://github.com/typesafehub/config/blob/master/HOCON.md

I. 用途
管理产品项目中的配置文件,使文件配置模块化,易于管理

II. 优点
1. 表达能力强, 可以写注释
2. 性能不错
3. 可定义变量,引用变量
4. 支持json,property文件格式
5. 入门简单,学习曲线很短
6. 可以模块化配置,在配置文件中可include 其他配置文件
6. 配置对象之间可以merge,深度merge
7. 可以引用环境变量
8. api调用非常简单
9. 应用广泛,许多著名项目比如 play, akka 都使用它,许多语言也在支持它
 
III. 语法 用法
是json格式文件的超集(可以理解成语法几乎一致,只不过功能更强大),
同时支持 java properties文件,主要有以下不同
1. 可以使用 = 替代 :
2. 可以省略 =或:, 当key后面是一个对象时,比如 coder  {id = 1, name = rock}  <=> coder = {id = 1, name = rock}
4. 多个语句之间可以省略逗号,前提是语句之间有换行符
    product {
        id = 123,
        version = 3.18,
        name = direct
    }
    与下面等价
    product {
        id = 123
        version = 3.18
        name = direct
    }

5. key 和 value 可以省略 双引号(当然有一些限制)详见规范 https://github.com/typesafehub/config/blob/master/HOCON.md
4. 变量替换,比如
   pid = 123
   direct {
         version = 3.18
         id = ${pid}
   }
6. include另外的配置文件,include 可以放在任何位置,比如
   global.conf
   pid = 123

   webservice.conf
   include "global.conf"   #这2个文件在同一目录下
   pms {
           host = pms.com
           path = /search/${pid}
   }

7. 对象连接
7.1 简单对象的连接
    msg = hello world   # 等价于 "hello world"
    name = xiao ming
    hello_guy = hello ${name}

7.2 数组连接
    ages = [15, 16, 17] [25, 26, 27]  # 等价于[15, 16, 17, 25, 26, 27]
    
    等价于以下
    ages = [15, 16, 17]
     ages = [25, 26, 27]
     另外数组有额外的远算符 +=
     arr = [1 2]
     arr += 3  
7.3 对象连接,对象merge
    product = {id = 123} {name = pa}   #{id = 123, name = pa}
    
    等价于以下
    product = {id = 123}
    product = {name = pa}
8. 在配置文件中使用注释,可以使用 // 或者 # 作为注释

9.  引用环境变量
    Env = DEV
    Env = ${?ENV}   #这里 ENV是环境变量或者其他已经定义过的变量
    以上两个语句的结果就是,
    假设ENV已经定义且值为QA,则最终Env的值为QA
    否则语句Env = ${?ENV} 会被忽略,最终Env的值为DEV

10. 将配置转换为java bean
    product {
        id = 123
        name = pa
    }
    # Product 有无参构造函数,且有set get方法
    Product product = ConfigBeanFactory.create(conf.getConfig("product"), Product.class);
11. key可以使用点号 '.'连接,且具有以下效果

   book.author.name = linux
以下面等价
book {
    author {
        name = linux
    }
}


IV. api调用
    假设有个配置文件 myapp.conf,内容如下
    { # 文件的开头和末尾可以省略 '{' 和 }', 但必须同时省略或同时包含
        ENV = LIVE
        pid = 123
        product {
            version = 3.18
            name = pa
        }
        dependency_services [
            {
                name = pms
                version = 2.0
            }
            {
                name = shareservice
                version = 3.0
            }
        ]
    }

    Config conf = ConfigFactory.load() # application.conf 文件至于classpath下面
    Config conf = ConfigFactory.load("myapp.conf");
    conf.getInt("pid");
    conf.getObject("product")
    conf.getString("product.name")
    conf.getAnyRefList("dependency_services")



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息