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

常用配置文件

在软件开发中,配置文件是连接代码静态世界(编译后的代码)和运行时动态环境的桥梁,是管理复杂性和变化的关键工具。选择一个合适的配置文件也是软件开发中的一个关键架构决策。

一、.ini(Initialization File)

.ini文件是一种非常古老且简单的无标准正式规范(但有着广泛共识)的配置格式,应该是最简单的配置文件了,采用简单的节([section])和键值对([key=value])结构,仅支持单层嵌套,适合扁平化的配置。语法极简,易于手动编辑,但仅支持字符串类型。

规范要求:

  • 使用方括号[]括起来,表示一个配置区块(节)。节名独占一行;
  • 键值对(key-value)格式为key = value或‘key : value’,等号(‘=’)更常见,同一节中键需唯一;
  • 节名、键名、值名均为大小写敏感;
  • 允许使用;#开头,注释整行;
  • 没有原生数据类型支持,所有值均为字符串;
  • 一般不允许多行值(ini文件追求简单,建议根据应用进行切割使用单行值);

示例配置:

; 这是一个数据库配置的INI示例
[database]
server = 192.168.1.1
port = 3306
username = root
password = 123456
enable = true[application]
name = My App
log_level = debug ; 这是一个行内注释

注:许多的.conf,.cfg文件本质还是.ini格式,一些简单的自定义配置文件也建议遵循该规范,方便约束和解析。

二、.toml(Tom’s Obvious, Minimal Language))

TOML 旨在成为一个更明确、易于读写的迷你语言。它是 INI 的超集,提供了严格的标准和丰富的原生数据类型。增加了对多层嵌套结构支持,通过表([table])和点分隔符([table.subtable])组织层次结构;原生支持了整数、浮点数、布尔值、日期时间、数组等强类型。

规范要求:

  • 使用方括号[]括起来,表示一个配置区块(节)。节名独占一行;
  • 支持使用‘[table.subtable]’方式定义多层嵌套结构;使用[[array_of_tables]]定义表数组;
  • 键值对(key-value)格式为key = value,同一节中键需唯一;
  • 支持多种数据类型,比如:
    • 字符串:“Hello”, ‘World’,“”“多行字符串”“”
    • 整数:12,32,-56
    • 浮点数:3.14
    • 布尔值:true,false
    • 偏移日期:2025-09-03T09:00:00Z
    • 字面量(不转义):“C:\Users\admin”
    • 数组:[ 1, 2, 3, ]
    • 内联表:inline = { key = “value”, num = 42 }
  • 使用#表示注释;

示例配置:

# 这是一个TOML配置示例
title = "TOML Example"[database]
server = "192.168.1.1"
ports = [ 8001, 8001, 8002 ]
connection_max = 5000
enabled = true[servers][servers.alpha] # 子表ip = "10.0.0.1"dc = "eqdc10"[[products]] # 表数组
name = "Hammer"
sku = 738594937[[products]]
name = "Nail"
sku = 284758393
color = "gray"

三、.json(JavaScript Object Notation)

JSON文件时一种更加广泛使用的轻量级数据交换格式,源于JavaScript,现已独立于语言。其规范由RFC 8259定义,对JSON的语法、数据类型都做了严格的定义和约束。JSON的设计目标简洁性和语言独立性,使其成为Web API和配置文件的常用格式。

规范要求:

  • 支持键值对集合(对象,用{}表示)和值的有序列表(数组,用[]表示);
  • 键类型只能为字符串,且必须用双引号""包括起来;
  • 值类型可以为字符串、数字、布尔值、数组、对象或null
  • 键值之间使用key : value的方式,键值对(对象)之间使用,分割,最后一个键值对(对象)后不允许尾随逗号;
  • 不支持注释(新规范支持),一般使用特定的key标识注释;

示例配置:

{"database": {"server": "192.168.1.1","ports": [8001, 8001, 8002],"connection_max": 5000,"enabled": true,"credentials": {"username": "root","password": "123456"}},"application": {"name": "My App","log_level": "debug"}
}

四、.yaml(YAML Ain’t Markup Language)

YAML时一种强调人类可读性的数据序列化格式,常用于配置文件和复杂的数据结构。

规范要求:

  • 使用空格缩进(通常两个空格)来表示层级关系;
  • 数据类型支持标量(Scalars)、序列(Sequences)、映射(Mappings)
    • 标量(Scalars):字符串、数字、布尔值等。(字符串可以不用双引号标识)
    • 序列(Sequences):及数组,使用短划线-表示列表项。(短划线-后面必须有一个空格)
    • 映射(Mappings):即对象,使用key: value表示。(冒号`:后面必须有一个空格)
  • 支持多行字符串
    • 使用|符号可以保留字符串中的换行符;
    • 使用>符号可以将字符串中的换行符替换为空格;
    • 使用|+>+可以保留所有尾部空行;
    • 使用|->-可以删除所有尾部空行;

示例配置:

# 这是一个YAML配置示例
database:server: "192.168.1.1"ports:- 8001- 8001- 8002connection_max: 5000enabled: truecredentials:username: rootpassword: "123456" # 数字最好用引号括起来,否则会被解析为整数application:name: My Applog_level: debugdescription: |This is a multi-linestring that preservesline breaks.

五、.xml

XML是一种历史悠久的标记语言,设计宗旨是传输和存储数据,其焦点是数据的结构和含义。它最大的优点就是非常的强大和严谨,但这也是它的缺点:相对其他配置文件会显得特别冗余和复杂。

规范要求:

  • 所有的数据需要被包括在开始标签<tag>和结束标签</tag>中;
  • 标签极其内容称为一个元素。元素可以嵌套;空元素可以用<empty />表示;
  • 开始标签中可以包含属性,格式为name="value"
  • 一般以<?xml version="1.0" encoding="UTF-8"?>开头,表示XML文档;
  • 支持注释:<!-- 这是一个注释 -->

配置示例:

<?xml version="1.0" encoding="UTF-8"?>
<config><database server="192.168.1.1" enabled="true"><ports>8001</ports><ports>8001</ports><ports>8002</ports><connection_max>5000</connection_max><credentials><username>root</username><password>123456</password></credentials></database><application><name>My App</name><log_level>debug</log_level></application>
</config>

六、总结

  • 追求极简和兼容性可以用ini;
  • 对INI配置文件进行增强可以用toml;
  • 方便在机器间(进程间)传递可以优先选择json(代码解析方便,应用很广泛);
  • 配置复杂,并优先保证人类的可读性优先选择yaml;
  • 对结构、格式有严格的要求,侧重数据存储优先选择xml(旧系统使用的多些);

文章转载自:

http://hpCIqEQr.yqkmd.cn
http://ylgwtjK9.yqkmd.cn
http://LAil99X3.yqkmd.cn
http://faPCqUp8.yqkmd.cn
http://rOCr0TRy.yqkmd.cn
http://CmrZAN80.yqkmd.cn
http://xIGaX1FM.yqkmd.cn
http://stC3Vbue.yqkmd.cn
http://PrRhP3GL.yqkmd.cn
http://S8NDPeLW.yqkmd.cn
http://Y3yaSt3z.yqkmd.cn
http://dn6NH9pv.yqkmd.cn
http://eaKeGSbj.yqkmd.cn
http://eys12wrY.yqkmd.cn
http://JnWvAlPK.yqkmd.cn
http://v6J4M0yr.yqkmd.cn
http://SsPe8ZM3.yqkmd.cn
http://ZslmFLfT.yqkmd.cn
http://XRZ0BINV.yqkmd.cn
http://6SnpdWvH.yqkmd.cn
http://viHWj96R.yqkmd.cn
http://lTSBhGnB.yqkmd.cn
http://r63mMqJ6.yqkmd.cn
http://wJrDqg0p.yqkmd.cn
http://QGH36gT5.yqkmd.cn
http://AOTTM4FK.yqkmd.cn
http://hj6XxXaQ.yqkmd.cn
http://jORHhfYV.yqkmd.cn
http://vKoWdJxm.yqkmd.cn
http://dNgmjc7B.yqkmd.cn
http://www.dtcms.com/a/370882.html

相关文章:

  • MySQL运维补充
  • JVM中如何调优新生代和老生代?
  • Transformer 架构的演进与未来方向(RNN → Self-Attention → Mamba)——李宏毅大模型2025第四讲笔记
  • 企业级监控方案对比:Zabbix vs Prometheus
  • 【Kubernetes】知识点总结6
  • 力扣3495. 使数组元素都变为零的最少操作次数 详解
  • 新能源研发,用新型实验记录本:ELN
  • 【LeetCode热题100道笔记】将有序数组转换为二叉搜索树
  • 【LeetCode热题100道笔记】二叉树的直径
  • 2023年ASOC SCI2区TOP,改进元启发式算法+考虑医护人员技能水平的家庭健康护理路径规划,深度解析+性能实测
  • wpf之TextBlock
  • Docker安装Ubuntu搭建Android SDK编译环境
  • Golang中逃逸现象, 变量“何时栈?何时堆?”
  • 我用Claude Code 开发了一个浏览器插件
  • LRU 算法和 LFU 算法有什么区别?
  • Cursor安装使用 与 Cursor网页端登录成功,客户端怎么也登陆不上
  • vue + ant-design-vue + vuedraggable 实现可视化表单设计器
  • 未来教育行业的 Go 服务开发解决方案与实践
  • 为什么ubuntu大文件拷贝会先快后慢?
  • SQL-窗口函数
  • buuctf-鸡藕椒盐味,[NPUCTF2020]EzRSA,[WUSTCTF2020]大数计算
  • OpsManage 项目启动脚本与 Docker 配置深度分析
  • 智能制造——解读97页汽配行业ERP整体解决方案【附全文阅读】
  • LIO-SAM 算法从入门到部署实践
  • ES6 核心特性详解:从变量声明到函数参数优化
  • 云手机在企业办公中的作用
  • 2025高教社国赛数学建模C题参考论文(含模型和代码)
  • RPC 和 HTTP 的区别
  • 通过Idea 阿里插件快速部署java jar包
  • 在Ubuntu 22.04系统中无需重启设置静态IP地址