设置文件 - Setting
# 设置文件 - Setting
简介
Setting
类是对 Java 原生 Properties
类的扩展,支持多种编码、变量解析和分组管理。相比 Properties
,它提供了更加灵活且易用的配置文件读取和写入方式,尤其适用于复杂配置文件的管理。
# 1. 主要特性
- 编码支持:
Setting
支持指定文件的编码格式,解决了Properties
文件只支持ISO8859-1
编码的问题。 - 变量解析:支持在配置文件中使用
${key}
的形式引用其他键的值,避免配置文件冗余。 - 分组支持:允许将配置项按分组管理,增强配置文件的结构化。
# 2. 使用场景
- 复杂配置管理:需要处理多分组、多变量的配置文件,如数据库配置、系统参数等。
- 动态配置:在运行时读取、解析并更新配置文件。
- 跨环境配置:在不同的开发、测试、生产环境下使用不同的配置文件,并能轻松切换。
# 3. 主要方法与示例
# 3.1 构造方法
Setting
提供了多种构造方式,支持通过文件路径、文件对象、输入流等多种形式加载配置文件。
# 示例:通过文件路径加载配置文件
import cn.hutool.setting.Setting;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.io.FileUtil;
public class SettingExample {
public static void main(String[] args) {
// 读取 classpath 下的 config/XXX.setting 文件,不使用变量替换
Setting setting = new Setting("config/XXX.setting");
// 读取绝对路径文件,指定编码和是否开启变量解析
setting = new Setting(FileUtil.touch("/home/user/XXX.setting"), CharsetUtil.CHARSET_UTF_8, true);
// 读取与 SettingExample.class 同包下的 XXX.setting 文件
setting = new Setting("XXX.setting", SettingExample.class, CharsetUtil.CHARSET_UTF_8, true);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- 方法签名:
public Setting(String path)
public Setting(File file)
public Setting(InputStream inputStream)
public Setting(String path, Class<?> clazz, Charset charset, boolean isUseVariable)
- 参数说明:
path
:配置文件的路径。file
:配置文件的文件对象。inputStream
:配置文件的输入流。clazz
:指定类的 Class 对象,配置文件与该类位于同一包路径。charset
:指定文件的编码格式。isUseVariable
:是否开启变量解析。
- 作用:用于加载配置文件并初始化
Setting
对象,适用于需要灵活加载配置文件的场景。
# 3.2 getStr
- 获取字符串类型的配置值
getStr
方法用于获取字符串类型的配置值,并支持分组管理。
# 示例:获取配置项的字符串值
import cn.hutool.setting.Setting;
public class SettingExample {
public static void main(String[] args) {
Setting setting = new Setting("config/test.setting");
// 获取默认分组中的配置项
String user = setting.getStr("user");
// 获取指定分组中的配置项
String driver = setting.getByGroup("driver", "database");
System.out.println("User: " + user);
System.out.println("Driver: " + driver);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- 方法签名:
public String getStr(String key)
public String getStr(String key, String defaultValue)
public String getByGroup(String key, String group)
- 参数说明:
key
:配置项的键。defaultValue
:当配置项不存在时返回的默认值。group
:分组名称。
- 作用:用于简化获取字符串配置值的过程,适用于获取常见的配置项如用户名、数据库驱动等。
# 3.3 getInt
- 获取整数类型的配置值
getInt
方法用于获取整数类型的配置值,并支持分组管理。
# 示例:获取配置项的整数值
import cn.hutool.setting.Setting;
public class SettingExample {
public static void main(String[] args) {
Setting setting = new Setting("config/test.setting");
// 获取整数配置项
int timeout = setting.getInt("timeout", "server", 30);
System.out.println("Timeout: " + timeout);
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
- 方法签名:
public Integer getInt(String key)
public Integer getInt(String key, String group, Integer defaultValue)
- 参数说明:
key
:配置项的键。group
:分组名称。defaultValue
:当配置项不存在时返回的默认值。
- 作用:用于获取整数类型的配置值,适用于读取数值配置项的场景,如超时时间、端口号等。
# 3.4 重新加载配置与自动加载
Setting
提供了 reload
和 autoLoad
方法,用于在配置文件发生变更时自动加载最新配置。
# 示例:自动加载配置文件
import cn.hutool.setting.Setting;
public class SettingExample {
public static void main(String[] args) {
Setting setting = new Setting("config/test.setting");
// 启用自动加载,当配置文件变更时自动刷新
setting.autoLoad(true);
// 模拟配置变更后重新获取值
setting.reload();
String user = setting.getStr("user");
System.out.println("User: " + user);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- 方法签名:
public void reload()
public void autoLoad(boolean autoReload)
- 参数说明:
autoReload
:是否开启自动加载。
- 作用:用于在配置文件发生变更时自动加载最新配置,适用于配置文件动态更新的场景。
# 4. 实际应用场景
- 跨环境配置管理:在不同的开发、测试、生产环境中,通过分组管理和变量解析功能,实现配置的灵活切换。
- 大型项目配置:在大型项目中,涉及多层次、多模块的配置文件管理,
Setting
的分组和变量解析功能可以有效提高配置文件的可维护性。 - 动态配置加载:在应用程序运行期间,通过自动加载功能实时更新配置,适用于热更新场景。
# 5. 注意事项
- 当使用变量解析时,请确保变量在文件中已定义,否则可能会导致值解析失败。
- 配置文件的编码需与
Setting
的构造方法中指定的编码一致,避免字符编码问题。
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08