com.typesafe.config
com.typesafe.config 是 Typesafe Config 库的核心包,主要用于 统一、灵活地管理应用程序配置,支持从多种格式(如 HOCON、JSON、Java Properties)加载配置,并提供类型安全的访问接口。以下是其核心功能的详细解析:
核心功能
- 多格式配置文件支持
HOCON(Human-Optimized Config Object Notation):
默认推荐格式,支持 JSON 超集,包含更简洁的语法(如省略引号、支持注释、嵌套合并等)。
app {
name = “my-app”
timeout = 10s # 支持时间单位
cluster {
nodes = [“192.168.1.1”, “192.168.1.2”]
}
}
JSON:兼容标准 JSON 文件。
Java Properties:传统 .properties 文件。
环境变量/系统属性:支持通过代码或配置键覆盖。 - 配置合并与优先级
分层加载:支持合并多个配置源(如 application.conf、reference.conf、环境变量等),优先级规则如下:
系统属性(-Dkey=value)。
环境变量(自动转换为 key.to.lowercase.with_underscores)。
项目根目录的 application.conf。
项目根目录的 application.json。
依赖库中的 reference.conf(如 Akka 的默认配置)。 - 类型安全访问
通过 Config 对象提供类型安全的方法读取配置值:
Config config = ConfigFactory.load();
String appName = config.getString(“app.name”);
Duration timeout = config.getDuration(“app.timeout”);
List nodes = config.getStringList(“app.cluster.nodes”); - 复杂配置结构
嵌套配置:支持多层嵌套的配置结构。
变量替换与复用:使用 KaTeX parse error: Expected '}', got 'EOF' at end of input: … url = "http://{common.domain}/api"
} - 动态配置与路径解析
路径操作:通过 Config.withValue() 动态修改配置。
配置路径解析:支持 config.getConfig(“app.cluster”) 提取子树。
关键类与接口
类/接口 作用
Config 配置数据的根接口,提供读取方法(如 getString)。
ConfigFactory 工厂类,用于加载配置(如 ConfigFactory.load())。
ConfigValue 表示配置值的基类(如字符串、列表、对象等)。
ConfigParseOptions 解析配置文件时的选项(如语法、资源定位)。
ConfigResolveOptions 解析变量替换时的选项(如是否允许未解析变量)。
典型使用场景 - 加载默认配置
// 自动加载 classpath 下的 application.conf、application.json、reference.conf
Config config = ConfigFactory.load();
// 指定配置文件名称
Config config = ConfigFactory.load(“my-config.conf”);
2. 覆盖配置
通过系统属性:
java -Dapp.timeout=5s -jar myapp.jar
代码中覆盖:
Config overrides = ConfigFactory.parseString(“app.timeout=5s”);
Config finalConfig = overrides.withFallback(ConfigFactory.load());
3. 多环境配置
定义环境特定文件(如 application-prod.conf):
include “application” # 包含默认配置
app {
domain = “prod.example.com”
}
激活环境配置:
java -Dconfig.resource=application-prod.conf -jar myapp.jar
优势与适用场景
优势 适用场景
统一配置管理 微服务架构中多模块共享配置。
动态覆盖机制 开发、测试、生产环境无缝切换配置。
类型安全访问 减少配置项类型错误导致的运行时异常。
HOCON 语法友好 需要复杂嵌套配置(如 Akka/Akka HTTP 应用)。
代码示例:读取配置
import com.typesafe.config.Config;
import com.typesafe.config.ConfigFactory;
public class AppConfig {
public static void main(String[] args) {
Config config = ConfigFactory.load();
String appName = config.getString("app.name");
int maxRetries = config.getInt("app.maxRetries");
boolean sslEnabled = config.getBoolean("app.ssl.enabled");
System.out.println("App Name: " + appName);
System.out.println("Max Retries: " + maxRetries);
System.out.println("SSL Enabled: " + sslEnabled);
}
}
总结
com.typesafe.config 提供了一套 标准化、高可维护性的配置管理方案,尤其适合需要灵活配置、多环境支持、与 Scala/Java 生态深度集成的应用(如 Akka、Play Framework、Lagom 等)。其核心价值在于通过简洁的 HOCON 语法和类型安全的 API,显著降低配置错误风险