Class ConfigWriter
java.lang.Object
io.github.theword.queqiao.core.config.io.ConfigWriter
配置写出器:ConfigWriteSnapshot → config.yml
职责边界(Phase 5 最重要的边界):
ConfigWriter = 持久化当前状态(save) ConfigSynchronizer= 改造文档使其符合 Schema(sync)因此
save 不会删除未知字段(核心未知与 addons 未知都必须保留),
也不会补齐缺失字段——那属于 Phase 6 的 sync。
其他边界:
- 只读:不修改 Runtime,也不修改 Document;
- deterministic:顺序完全取自 Schema 的声明顺序,绝不按字母排序, 也不依赖任何 HashMap 迭代顺序;
- 类型安全:标量表示由
ConfigCodec.write(Object)决定,字符串的 YAML quoting 统一由scalar(Object)一处负责; - 不引入新的 YAML 依赖:读仍由 snakeyaml 负责,写出的文本必须能被它读回。
- Since:
- 0.6.12
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionrender(ConfigWriteSnapshot snapshot) 渲染成 YAML 文本voidwrite(ConfigWriteSnapshot snapshot, Path target, org.slf4j.Logger logger) 原子写入目标文件(复用既有的ConfigStore:临时文件 → fsync → 原子替换 → 5 份备份轮换)
-
Constructor Details
-
ConfigWriter
public ConfigWriter()
-
-
Method Details
-
render
渲染成 YAML 文本- Parameters:
snapshot- 写盘快照- Returns:
- YAML 文本
-
write
public void write(ConfigWriteSnapshot snapshot, Path target, org.slf4j.Logger logger) throws IOException 原子写入目标文件(复用既有的ConfigStore:临时文件 → fsync → 原子替换 → 5 份备份轮换)渲染先于写盘,因此渲染失败绝不会破坏已有的
config.yml; 写盘本身也是"先写临时文件再替换",磁盘满 / 权限不足等 I/O 错误不会造成配置丢失。- Parameters:
snapshot- 写盘快照target- 目标文件logger- 日志实现,可为 null- Throws:
IOException- 写盘失败
-