配置文件神器 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")
- MyBatis的Mapper配置文件的parameterType用法
- redis简介和conf文件配置说明
- Mybatis配置映射文件中parameterType的用法小结
- com.typesafe.config加载任意位置的配置文件
- redis服务简介 && redis.conf配置文件详解
- debian中resolv.conf配置文件的用法
- Apache 2.2主配置文件/etc/httpd/conf/httpd.conf配置解说
- redis配置文件redis.conf详细说明
- nginx1.8.1(稳定版本) nginx.conf 配置文件详解二
- android项目中关于proguard.cfg和proguard-project.txt 混淆文件的用法与配置
- ALSA配置文件(alsa.conf, asoundrc, asound.conf)及其自动加载 And HDMI Adiuo
- 生产环境下的nginx.conf配置文件(多虚拟主机) (转)
- Nginx配置文件nginx.conf中文详解(总结)
- nginx 配置多域名,配置多个conf 文件
- Nginx配置文件(nginx.conf)配置详解
- Apache配置文件httpd.conf细说
- 【mysql】linux查看mysql配置文件my.conf
- (转)ALSA配置文件(alsa.conf, asoundrc, asound.conf)及其自动加载 And HDMI Adiuo
- ASP.NET 配置文件 configSource 的用法
- JAVAEE学习——hibernate01:简介、搭建、配置文件详解、API详解和CRM练习:保存客户