HOCON(Human-Optimized Config Object Notation)是一种用于配置文件的格式。它是基于 JSON(JavaScript Object Notation)的一种增强格式,由 Lightbend 公司开发,主要用于其 Akka 和 Play Framework 等项目。HOCON 具有比 JSON 更人性化和可读的特性,同时保持了 JSON 的表达能力和通用性。

HOCON 格式的特点

  1. 基于 JSON:HOCON 是 JSON 的超集,这意味着所有合法的 JSON 都是合法的 HOCON。
  2. 更简洁的语法:HOCON 提供了更简洁的语法,省去了许多冗余的符号。
  3. 注释支持:HOCON 支持单行注释和块注释。
  4. 可选的逗号和花括号:HOCON 允许省略 JSON 中必须的逗号和花括号。
  5. 路径表达式:HOCON 允许使用路径表达式来定义嵌套的对象。
  6. 包含和继承:HOCON 支持引用其他文件和继承配置。
  7. 类型推断:HOCON 能够自动推断数值的类型,例如整数、浮点数和布尔值。

HOCON 语法示例

以下是一个 HOCON 配置文件的示例,展示了其语法和特性:

// HOCON 支持单行注释

# HOCON 也支持这种风格的单行注释

/*
  这是块注释
*/

// 定义一个简单的对象
simple {
  # 键值对可以使用等号、冒号或空格分隔
  key1 = "value1"
  key2 : 42
  key3 "value3"
}

// 嵌套对象可以通过缩进表示
nested {
  object {
    key = "nested value"
  }
}

// 路径表达式定义嵌套对象
path.expressions.are.useful {
  key = "path value"
}

// 支持包含其他文件
include "another.conf"

// 支持类型推断
types {
  intValue = 123
  floatValue = 123.45
  booleanValue = true
}

// 数组的定义
array = [1, 2, 3, 4]

// 支持多行字符串
multilineString = """
  This is a
  multi-line string
"""

HOCON 的主要功能和优势

  1. 易读性和简洁性:HOCON 的语法设计旨在提高配置文件的可读性和简洁性,减少了配置文件中的冗余符号,使配置更加直观。
  2. 灵活的注释支持:支持多种注释方式,方便开发者在配置文件中添加注释和说明。
  3. 路径表达式:通过路径表达式,开发者可以更方便地定义和访问嵌套的配置对象,避免了大量的嵌套括号。
  4. 动态包含和继承:HOCON 支持从其他文件包含配置,并允许配置继承,这使得配置文件可以模块化和重用。
  5. 类型推断:HOCON 能够自动推断数值的类型,减少了手动类型声明的需要。

典型用例

HOCON 常用于以下场景:

  1. 应用配置:用于定义应用程序的配置参数,例如数据库连接、API 密钥和其他运行时参数。
  2. 环境配置:在不同的环境(如开发、测试、生产)中使用不同的配置文件,并通过包含和继承机制进行配置管理。
  3. 微服务配置:在微服务架构中,每个服务可以有独立的配置文件,使用 HOCON 的包含和路径表达式来管理全局和局部配置。

工具支持

HOCON 被广泛用于 Scala 和 Java 项目,并得到了许多配置管理库的支持,例如:

  • Typesafe Config:一个用于读取和解析 HOCON 配置的库,广泛用于 Akka、Play Framework 等项目。
  • Lightbend Config:类似于 Typesafe Config,但用于更广泛的用途,包括 Java 和 Scala 应用。

资料

https://github.com/lightbend/config/blob/main/HOCON.md