Hutool 官网:https://www.hutool.cn
官方参考文档:https://www.hutool.cn/docs
本节内容对应官方文档位置:设置文件-Setting (hutool.cn)
Hutool 版本:5.7.1
特点
- setting兼容properties文件格式
- 支持各类编码方式(注释和value可用中文)
- 支持变量
${key}
,减少配置文件冗余 - 支持分组
[group]
,增加配置文件可读性
配置格式
# ------------------------------------------------------------- # ----- Setting File with UTF8----- # ----- 数据库配置文件 ----- # ------------------------------------------------------------- #中括表示一个分组,其下面的所有属性归属于这个分组,在此分组名为demo,也可以没有分组 [demo] #自定义数据源设置文件,这个文件会针对当前分组生效,用于给当前分组配置单独的数据库连接池参数,没有则使用全局的配置 ds.setting.path = config/other.setting #数据库驱动名,如果不指定,则会根据url自动判定 driver = com.mysql.jdbc.Driver #JDBC url,必须 url = jdbc:mysql://fedora.vmware:3306/extractor #用户名,必须 user = root${demo.driver} #密码,必须,如果密码为空,请填写 pass = pass = 123456
规则:
- 只支持单行注释
#这是一个注释
,value后不能添加注释,如driver = com.mysql.jdbc.Driver #这个注释是value的一部分
,获取driver的value为:com.mysql.jdbc.Driver #这个注释是value的一部分
- 键值表示方式:
key = value
,例如pass = 123456
,key和value之间空格会被trim掉 - 分组表示方式:
[group]
,例如:[demo]
- 变量表示方式:
${变量名}
,例如:user = root${demo.driver}
,变量只能识别读入行的变量,例如第6行的变量在第三行无法读取,变量默认不开启,需要在初始化时指定
应用
- Setting初始化
Setting setting = new Setting(path,class,code,isVariable)
path:path/xxx.setting
可以在任何位置,默认是相对路径,在项目的classes文件夹下,必填
class:xxx.class
,默认相对路径改为与xxx.class文件同包下,选填
code:CharsetUtil.xxx
,文件编码(Hutool字符集工具类),选填
isVariable:true\false
,是否开启变量,默认为false,选填 - Setting读取配置参数
setting.getStr(key)
获取默认无分组下key的value,出现相同key取最后一行的key
setting.getByGroup(key, group)
获取group下key的value,出现相同key取最后一行的key
setting.getStr(key, 默认值)
获取默认无分组下key的value,若不存在key时,返回默认值
setting.getStr(key, group, 默认值)
获取group下key的value,若不存在key时,返回默认值
setting.getWithLog(key);
获取默认无分组下key的value,若不存在key,则打印debug日志No key define for [key]
setting.getByGroupWithLog(key, group);
获取group下key的value,若不存在key,则打印debug日志No key define for [key]
setting.getSetting(group)
获取group下所有配置键值对,组成新的Setting - 重新加载配置和保存配置
setting.reload()
重新读取配置文件
setting.autoLoad(true)
在配置文件变更时自动加载
setting.getGroups()
获得所有分组名
setting.setVarRegex(正则表达式)
设定变量名的正则表达式,Setting的变量替换是通过正则查找替换的,如果Setting中的变量名其他冲突,可以改变变量的定义方式
setting.toBean(bean)
将key-value映射为对象,原理是原理是调用对象对应的setXX方法
setting.set(key, group,value)
添加\更改key对应的value,group可不填,不填则默认为无分组配置参数
setting.store()
保存设置到文件
例子:
在classes\config下新建一个test.setting文件
#默认无分组
name = abc
sex = woman
age = ${group1.sex}
name = 张三
abc =
#这是注释
[group1]
name = zhang 3 #这是value一部分
sex = man
age = 18
[group2]
title = welcome ${group1.name}
content = ${group1.sex}
# 下面还是group2的内容
name = hello
测试代码
//不开启变量
Setting setting = new Setting("config/test.setting");
//开启变量
Setting setting2 = new Setting("config/test.setting",true);
//返回:张三
setting.getStr("name")
//返回:${group1.age},因为读取不了后面的数据
setting2.getStr("age")
//返回:welcome ${group1.name}
setting.getByGroup("title","group2")
//返回:welcome zhang 3 #这是value一部分
setting2.getByGroup("title","group2")
//返回:
setting.getStr("abc","haha")
//返回:haha
setting.getStr("dd","haha")
//返回:null ,打印 DEBUG cn.hutool.setting.AbsSetting - No key define for [dd]!
setting.getWithLog("dd")
//返回:man
setting2.getSetting("group2").getStr("content")
//返回:null
setting2.getSetting("group2").getByGroup("name","group1")
//返回:hello
setting.set("name", "hello")
setting.getStr("name")