You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Maven Properties插件读取数据库配置遇加载异常

解决Maven打包后无法加载数据库属性文件的问题

我来帮你分析下问题所在,以及给出具体的修复方案:

问题根源

你当前的代码通过DatabaseSetting.class.getResource(dbPropertiesName).getPath()获取文件路径,再用FileInputStream读取——这种方式在IntelliJ里能正常运行,是因为此时属性文件是磁盘上的独立文件,路径是有效的。但Maven打包成Jar后,属性文件会被打包到Jar包内部,不再是磁盘上的单独文件,getPath()返回的是Jar内部的虚拟路径,FileInputStream根本找不到这个"文件",所以抛出IO异常。

修复方案:直接读取资源流

Jar包内的资源不能用文件系统的方式访问,正确的做法是直接通过getResourceAsStream()获取输入流来读取属性文件,不需要转换成File对象。

修改你的loadSettings方法如下:

public static DatabaseSetting loadSettings(String dbPropertiesName) {
    Properties dbProperties = new Properties();
    // 直接从类加载器获取资源流
    try (InputStream inputStream = DatabaseSetting.class.getResourceAsStream(dbPropertiesName)) {
        if (inputStream == null) {
            throw new RuntimeException("Cannot find database configuration file: " + dbPropertiesName);
        }
        dbProperties.load(inputStream);
        String host = dbProperties.getProperty("host");
        String username = dbProperties.getProperty("username");
        String password = dbProperties.getProperty("password");
        String databaseName = dbProperties.getProperty("databaseName");
        String table = dbProperties.getProperty("table");
        return new DatabaseSetting(databaseName, host, username, password, table);
    } catch (IOException e) {
        throw new RuntimeException("Error loading database configuration file.", e);
    }
}

关键修改点:

  • 用getResourceAsStream()替代getResource().getPath()+FileInputStream,直接获取Jar内资源的输入流
  • 使用try-with-resources语法自动关闭输入流,避免资源泄漏
  • 添加了资源不存在的判断,抛出更明确的异常信息
  • 把原始异常e传入RuntimeException,方便排查具体错误(比如文件内容格式问题)

额外注意事项

  • 资源文件路径正确性:确保你传入的dbPropertiesName是正确的类路径资源路径。如果你的database.properties在src/main/resources下,打包后会放在类根路径,所以应该传入"/database.properties"(注意开头的斜杠)。
  • Maven插件的作用确认:你配置的properties-maven-plugin是用来在Maven构建阶段读取属性文件到项目属性中(比如供其他插件或资源过滤使用),和代码运行时加载属性文件是两回事——如果你的代码不需要在构建阶段用这些属性,这个插件其实不影响运行时的资源加载,不过保留也没问题。

内容的提问来源于stack exchange,提问作者Kim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:07:29