1.美图
2.概述
一个配置管理的库
2.1 用途
管理产品项目中的配置文件,使文件配置模块化,易于管理
2.2 优点
- 表达能力强, 可以写注释
- 性能不错
- 可定义变量,引用变量
- 支持json,property文件格式
- 入门简单,学习曲线很短
- 可以模块化配置,在配置文件中可include 其他配置文件
- 配置对象之间可以merge,深度merge
- 可以引用环境变量
- api调用非常简单
- 应用广泛,许多著名项目比如 play, akka 都使用它,许多语言也在支持它
2.3 语法 用法
是json格式文件的超集(可以理解成语法几乎一致,只不过功能更强大),
同时支持 java properties文件,主要有以下不同
- 可以使用 = 替代 :
- 可以省略 =或:, 当key后面是一个对象时,比如 coder {id = 1, name = rock} <=> coder = {id = 1, name = rock}
- 多个语句之间可以省略逗号,前提是语句之间有换行符
3.简介
2.1.添加maven依赖项
<dependency>
<groupId>com.typesafe</groupId>
<artifactId>config</artifactId>
<version>1.3.2</version>
</dependency>
2.2 通过ConfigFactory加载配置
val config = ConfigFactory.load(resourceBasename)
如果不带参数,则加载application.conf
可以加载多个配置文件,通过withFallback将两个配置实例合并
val finalConfig = newConfig.withFallback(config).resolve
如果有相同的配置项,newConfig的配置会覆盖config的配置
resolve用于substitutions(${config_item})
2.3.获取配置项
Config提供了getString,getBoolean等方法
val country = config.getString("user.country")
可以解析不同单位的时长(分,秒等)和大小(G、M等)
import java.util.concurrent.TimeUnit
config.getDuration("redis.ttl", TimeUnit.MINUTES)
config.getDuration("redis.ttl", TimeUnit.SECONDS)
// maxFileSize = 512k or maxFileSize = 2G
config.getMemorySize("maxFileSize").toBytes()
// 处理列表或数组
config.getIntList("conf.some_list")
config.getStringList("conf.some_list")
3.案例
reference.conf
user.country=中国
user.name=lcc
user.country1=中国人
user.conf
user.xjj=谢静静
测试类
package com.tools.typesafe;
import com.typesafe.config.Config;
import com.typesafe.config.ConfigFactory;
import org.junit.Test;
import java.util.ArrayList;
public class TypeSafeDemoTest {
/**
* 测试点:测试读取单个文件的配置
*
* CN 居然会自动中英文转换
* lcc
* 中国人
*/
@Test
public void testConfig() {
Config config = ConfigFactory.load("reference.conf");
String country = config.getString("user.country");
System.out.println(country);
String name = config.getString("user.name");
System.out.println(name);
String country1 = config.getString("user.country1");
System.out.println(country1);
}
/**
* 测试点:合并配置
*
* CN
* lcc
* 谢静静
*/
@Test
public void testConfig1() {
Config config = ConfigFactory.load("reference.conf");
Config userConfig = ConfigFactory.load("user.conf");
Config allConf = config.withFallback(userConfig).resolve();
String country1 = allConf.getString("user.country");
String country2 = allConf.getString("user.name");
String country3 = allConf.getString("user.xjj");
System.out.println(country1);
System.out.println(country2);
System.out.println(country3);
}
}