当前位置: 首页 > article >正文

com.typesafe.config

com.typesafe.config 是 Typesafe Config 库的核心包,主要用于 统一、灵活地管理应用程序配置,支持从多种格式(如 HOCON、JSON、Java Properties)加载配置,并提供类型安全的访问接口。以下是其核心功能的详细解析:

核心功能

  1. 多格式配置文件支持
    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 文件。
    环境变量/系统属性:支持通过代码或配置键覆盖。
  2. 配置合并与优先级
    分层加载:支持合并多个配置源(如 application.conf、reference.conf、环境变量等),优先级规则如下:
    系统属性(-Dkey=value)。
    环境变量(自动转换为 key.to.lowercase.with_underscores)。
    项目根目录的 application.conf。
    项目根目录的 application.json。
    依赖库中的 reference.conf(如 Akka 的默认配置)。
  3. 类型安全访问
    通过 Config 对象提供类型安全的方法读取配置值:
    Config config = ConfigFactory.load();
    String appName = config.getString(“app.name”);
    Duration timeout = config.getDuration(“app.timeout”);
    List nodes = config.getStringList(“app.cluster.nodes”);
  4. 复杂配置结构
    嵌套配置:支持多层嵌套的配置结构。
    变量替换与复用:使用 KaTeX parse error: Expected '}', got 'EOF' at end of input: … url = "http://{common.domain}/api"
    }
  5. 动态配置与路径解析
    路径操作:通过 Config.withValue() 动态修改配置。
    配置路径解析:支持 config.getConfig(“app.cluster”) 提取子树。
    关键类与接口
    类/接口 作用
    Config 配置数据的根接口,提供读取方法(如 getString)。
    ConfigFactory 工厂类,用于加载配置(如 ConfigFactory.load())。
    ConfigValue 表示配置值的基类(如字符串、列表、对象等)。
    ConfigParseOptions 解析配置文件时的选项(如语法、资源定位)。
    ConfigResolveOptions 解析变量替换时的选项(如是否允许未解析变量)。
    典型使用场景
  6. 加载默认配置
    // 自动加载 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,显著降低配置错误风险


http://www.kler.cn/a/552212.html

相关文章:

  • 部署postgresql_exporter监控pgsql
  • 利用acme.sh 申请 Google 免费证书
  • 三种安全协议 IPSec SSL PGP
  • 【二分搜索题目】
  • [代码调试]安装Text2Image(stable diffusion)模型环境的踩坑记录
  • 【Go | 从0实现简单分布式缓存】-2:HTTP服务端与一致性哈希
  • cv2库的使用及图像预处理02
  • Linux——Centos的安装与配置
  • WebSocket 小白快速入门(2025)
  • 随机生成多孔介质matlab程序
  • MySQL中count(1)和count(*) 的区别
  • 基于Java+Swing+Mysql实现旅游管理信息系统
  • 基于 Spring Boot 的 “宠物领养系统” 系统的设计与实现
  • 23种设计模式 - 建造者模式
  • JUC并发—6.AQS源码分析二
  • CDN进阶学习<->
  • Git Pull 报错解决方案:fatal: Need to specify how to reconcile divergent branches
  • HarmonyOS4-工具安装
  • 【Linux Redis】关于用docker拉取Redis后,让虚拟机运行起来redis,并使得其可以连接到虚拟机外的navicat。
  • leaflet前端初始化项目