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

项目主页 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")



转载于:https://my.oschina.net/rock117/blog/535829

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值