Class ConfigStore

java.lang.Object
io.github.theword.queqiao.core.config.io.ConfigStore

public final class ConfigStore extends Object
配置文件写入器

本类不在正常启动路径上被调用——正常启动只读不写 config.yml。 它提供给真正需要覆盖用户文件的场景: 未来的 ConfigMigration、显式的"同步配置"命令。

保证:

  • 原子写:临时文件 → 完整写入 → fsync → ATOMIC_MOVE。 文件系统不支持时降级为 REPLACE_EXISTING 并记录日志;
  • 可恢复备份:轮换保留最多 5 份, 避免单份备份被下一次写入覆盖。
Since:
0.6.11
  • Field Details

    • MAX_BACKUPS

      public static final int MAX_BACKUPS
      备份最多保留份数
      See Also:
  • Method Details

    • resolveConfigPath

      public static Path resolveConfigPath(boolean isModServer)
      解析配置文件路径

      插件端为 plugins/QueQiao/config.yml,模组端为 config/QueQiao/config.yml (相对工作目录)。统一使用 BaseConstant.MODULE_NAME, 避免出现 QueQiao 与 queqiao 两套目录(Linux 下会真的分成两个)。

      Parameters:
      isModServer - 是否为模组服务端
      Returns:
      配置文件路径
    • backupAndWriteAtomically

      public static void backupAndWriteAtomically(Path target, String content, org.slf4j.Logger logger) throws IOException
      备份后原子写入
      Parameters:
      target - 目标文件
      content - 完整内容
      logger - 日志实现,可为 null
      Throws:
      IOException - 写入失败
    • writeAtomically

      public static void writeAtomically(Path target, String content, org.slf4j.Logger logger) throws IOException
      原子写入文本
      Parameters:
      target - 目标文件
      content - 完整内容
      logger - 日志实现,可为 null
      Throws:
      IOException - 写入失败
    • rotateBackup

      public static void rotateBackup(Path target, org.slf4j.Logger logger) throws IOException
      轮换备份

      命名与轮换方向(最多 5 份):

       config.yml.bak.4  ← 最旧,将被删除
       config.yml.bak.3
       config.yml.bak.2
       config.yml.bak.1
       config.yml.bak    ← 最新,即本次写入前的内容
       
      Parameters:
      target - 目标文件;不存在时直接返回
      logger - 日志实现,可为 null
      Throws:
      IOException - 轮换失败