高效的配置文件读取工具支持properties和yaml

JefConfig

前言
日常工作中不知道到大家有没有遇到以下几种情况:
1、在程序启动时需要加载配置文件,但是发现程序只能从固定位置读取配置文件。
2、程序在集成了spring框架后,想从配置文件中获取某个配置,但是发现当前程序并未交由spring管理,比如某个静态类中想要读取配置文件。
3、写了一个外挂程序想要快速的处理某个问题,但是需要读取配置文件,这时还有单独去写读取方法,而且写完之后还要考虑是否需要使用缓存。
介绍
该项目提供多种配置文件读取方式,提供缓存功能,是一款轻量级的配置文件加载工具。目前支持propertis和yaml配置文件读取。

使用方法:
    ①、在项目中创建jef.properties文件(工具默认读取资源文件夹下的jef.properties文件)。
    ②、创建自定义Enum类实现ConfigItem接口,定义自己的属性。
    ③、使用JefConfiguration.get(xxx)获取
    ④、支持自定义文件名:VM启动参数中添加-Djef.properties=file:///C:xxx\xx\xxx.properties或者-Djef.properties=file:///D:xx\xx\xxx.yaml 来指定自己的配置文件或者使用System.setProperty(xxx)来设置
    ⑤、支持标准文件协议,例如获取指定路径下的文件    
       System.setProperty("jef.properties","file:///D:\Java\JavaSource\JefConfig\src\test\java\testdDir\my.properties");
使用示例

自定义Enum类

import pers.cz.config.ConfigItem;

public enum TestItem implements ConfigItem {

    TEST_ITEM,
    TEST_CODE
}

jef.properties配置示例(系统默认分隔符为"=“或者”:",如果一行中两者都存在,则默认使用第一次出现的分隔符做为本行的分隔符)

# 系统注释符号为"#"和"!"
test.item:999988
# 该条配置将使用=做为分割符号
db.url=jdbc:mysql://127.0.0.1:3306/test
!该条配置将使用:做为分隔符
db.type:mysql=1

jef.yaml配置示例

db:
  url: jdbc:oracle:thin:@(DESCRIPTION =(FAILOVER = ON)(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 126.0.0.1)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = shzw))))
  type: test
server:
  port: 9000
  tomcat:
    uri-encoding: UTF-8
  jetty:
    max-http-post-size: 104857600
    max-http-form-post-size: 104857600
  servlet:
    session:
      cookie:
        name: "HSESSIONID"

获取自定义配置:
示例1:读取默认配置jef.prperties

import pers.cz.config.JefConfiguration;

public class Main {

    public static void main(String[] args) {
        String s = JefConfiguration.get(TestItem.TEST_ITEM);
        System.out.println(s);
    }
}

示例2:编码式读取自定义配置

import pers.cz.config.JefConfiguration;

public class Main {

    public static void main(String[] args) {
        System.setProperty("jef.properties", "file:///D:\Java\JavaSource\JefConfig\src\test\java\testdDir\test.yaml");
        String s = JefConfiguration.get(TestItem.TEST_ITEM);
        System.out.println(s);
    }
}

示例3:运行时读取自定义配置
jvm启动参数中添加配置:-Djef.properties=file:///D:\Java\JavaSource\JefConfig\src\test\java\testdDir\test.yaml

import pers.cz.config.JefConfiguration;

public class Main {

    public static void main(String[] args) {
        String s = JefConfiguration.get(TestItem.TEST_ITEM);
        System.out.println(s);
    }
}

效果:

image.png

为什么要自定义配置读取工具

一、JDK自带的Properties使用时的不便之处:

1、在遍历时,由于Properties继承了Map<Object,Object>泛型,不得不编写强制类型转换的代码。
2、Properties继承了Hashtable性能低下,此外如果getProperty(null)还会抛出异常。
3、Properties中的数据是乱序的,无法保持原先在文件中出现的顺序
4、Properties保留了基于InputStream的接口,使用时容易出现编码错误

二、自己实现yaml解析器的好处:

1、yaml的解析不管是springboot中的自带的还是其他框架提供的,都是使用第三方jar包(jyaml.jar、snakeyaml.jar等)来解析的,因此如果我也使用该方式读取,那么用户在集成使用的时候可能会引起jar包冲突。    
2、由于该工具只是做为解析配置文件,因此不需要实现yaml的复杂语法解析,更轻量,更实用。

三、自动配置工具天然支持缓存,不需要额外去配置。

项目地址:

https://gitee.com/chengzhi2/JefConfig

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值