Skip to content

[Bug] Windows 下 dataDir 路径缺少分隔符导致数据库创建位置错误 #155

@wwppee

Description

@wwppee

[Bug] Windows 下 dataDir 路径缺少分隔符导致数据库创建位置错误

环境信息

  • Huntly 版本: v0.6.4(JAR 文件:huntly-server-0.6.4.jar
  • 操作系统: Windows 10/11
  • Java 版本: OpenJDK 21

问题描述

在 Windows 系统下使用 --huntly.dataDir 参数指定数据目录时,如果路径末尾没有分隔符,数据库文件会被创建到错误的位置。

复现示例

# 启动命令
java -jar huntly-server-0.6.4.jar --huntly.dataDir="C:\Users\name\huntly"

# 期望的数据库路径
C:\Users\name\huntly\db.sqlite

# 实际的数据库路径(BUG)
C:\Users\name\huntlydb.sqlite
#                    ^ 缺少分隔符!

根因分析

通过解压 JAR 文件,确认问题在 application.yml 中:

spring:
  datasource:
    url: jdbc:sqlite:${huntly.dataDir:}db.sqlite?date_class=TEXT

配置使用了简单的字符串拼接,没有确保 dataDirdb.sqlite 之间有路径分隔符。

临时解决方案(用户侧)

使用正斜杠并加上尾部斜杠

java -jar huntly-server-0.6.4.jar --huntly.dataDir="C:/Users/name/huntly/"

正斜杠在 Windows Java 中同样有效,且避免了反斜杠的转义问题。

建议修复方案

方案 A:修改 application.yml(改动最小)

在占位符默认值中添加尾部斜杠:

spring:
  datasource:
    url: jdbc:sqlite:${huntly.dataDir:./}db.sqlite?date_class=TEXT

但这只能解决空值情况,无法处理用户传入的无尾部斜杠路径。

方案 B:在 HuntlyProperties 中规范化路径(推荐)

HuntlyProperties.java 或启动配置中添加路径规范化:

@PostConstruct
public void normalizeDataDir() {
    if (dataDir != null && !dataDir.isEmpty()) {
        // 确保尾部有分隔符
        if (!dataDir.endsWith(File.separator) && !dataDir.endsWith("/")) {
            dataDir += File.separator;
        }
    }
}

方案 C:使用 FilePath API(最佳实践)

避免在 YAML 中拼接路径,改为在代码中构造:

File dbFile = new File(dataDir, "db.sqlite");
String dbUrl = "jdbc:sqlite:" + dbFile.getAbsolutePath() + "?date_class=TEXT";

或使用 NIO:

Path dbPath = Paths.get(dataDir, "db.sqlite");
String dbUrl = "jdbc:sqlite:" + dbPath.toAbsolutePath() + "?date_class=TEXT";

这样可以正确处理所有平台的路径分隔符。

补充信息

  • 该问题在 Windows 中文用户名路径(如 C:\Users\中文名\...)下更容易触发,因为路径处理本身就比较敏感
  • JAR 文件名显示 0.6.4,但启动日志显示 v0.5.0,版本号显示可能也需要检查一下

感谢开发这个优秀的项目!
以上是ai自己分析写的。我平常使用openclaw的minimax-m2.7来手动启动huntly,偶然间换成其他模型发现简单的一句话命令不能启动原有的数据库了(这个是模型指令遵循度的问题,用高遵循度模型就能套用skill的经验),然后ai说是跨平台的基础问题bug。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions