工具包:Safetype Config使用

1.美图

在这里插入图片描述

2.概述

一个配置管理的库

2.1 用途

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

2.2 优点

  1. 表达能力强, 可以写注释
  2. 性能不错
  3. 可定义变量,引用变量
  4. 支持json,property文件格式
  5. 入门简单,学习曲线很短
  6. 可以模块化配置,在配置文件中可include 其他配置文件
  7. 配置对象之间可以merge,深度merge
  8. 可以引用环境变量
  9. api调用非常简单
  10. 应用广泛,许多著名项目比如 play, akka 都使用它,许多语言也在支持它

2.3 语法 用法

是json格式文件的超集(可以理解成语法几乎一致,只不过功能更强大),
同时支持 java properties文件,主要有以下不同

  1. 可以使用 = 替代 :
  2. 可以省略 =或:, 当key后面是一个对象时,比如 coder {id = 1, name = rock} <=> coder = {id = 1, name = rock}
  3. 多个语句之间可以省略逗号,前提是语句之间有换行符

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);

    }




}

发布了1139 篇原创文章 · 获赞 454 · 访问量 142万+

猜你喜欢

转载自blog.csdn.net/qq_21383435/article/details/105126156