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

非Spring环境下java -jar如何指定外部application.properties

纯JDBC项目外置application.properties的几种方案

下面给你几个不用传路径参数(java -jar App.jar /path/to/config)的方案,适配纯JDBC项目:

方案1:通过系统属性(-D参数)指定路径

启动时用-D参数传递配置文件路径,代码里读取这个系统属性,优先用外置配置,没指定就 fallback 到内置的。

启动命令:

java -jar App.jar -Dconfig.path=/opt/config/application.properties

修改后的读取代码:

Properties properties = new Properties();
// 默认用内置的配置,指定了-Dconfig.path就用外置的
String configPath = System.getProperty("config.path", "/application.properties");
InputStream is;

try {
    if (new File(configPath).isAbsolute()) {
        // 绝对路径,直接读取文件
        is = new FileInputStream(configPath);
    } else {
        // 相对路径,从类路径读取(兼容内置场景)
        is = PropertiesLoader.class.getResourceAsStream(configPath);
    }
    properties.load(is);
} catch (IOException e) {
    // 处理加载失败的情况,比如日志输出
    e.printStackTrace();
}

方案2:扩展类路径,自动覆盖内置配置

这个方案不需要修改代码,只需要调整启动命令,把配置文件所在目录加到类路径最前面,类加载器会优先加载外置的配置文件。

启动命令(Linux/macOS):

java -cp "/opt/config:./App.jar" com.your.package.YourMainClass

(注意:Windows系统把冒号:换成分号;)

原理:当类路径包含配置文件所在目录时,Java会先从该目录查找application.properties,找到就用,找不到才会读取jar包内的版本。

方案3:优先读取jar同目录的配置文件

如果希望启动命令完全不变(还是java -jar App.jar),可以让代码优先读取当前工作目录下的application.properties,不存在再用内置的。

修改后的读取代码:

Properties properties = new Properties();
InputStream is;

// 先尝试读取当前目录的外置配置
File externalConfig = new File("application.properties");
if (externalConfig.exists() && externalConfig.canRead()) {
    is = new FileInputStream(externalConfig);
} else {
    // 读不到外置的就用jar里的内置配置
    is = PropertiesLoader.class.getResourceAsStream("/application.properties");
}

try {
    properties.load(is);
} catch (IOException e) {
    e.printStackTrace();
}

使用方式:把application.properties放在和App.jar同一个目录下,直接执行java -jar App.jar即可自动加载外置配置。


内容的提问来源于stack exchange,提问作者Marco Frag Delle Monache

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 13:05:15