gpt4 book ai didi

java - 覆盖 .jar 库中包含的 .properties 文件

转载 作者:太空宇宙 更新时间:2023-11-04 14:11:35 25 4
gpt4 key购买 nike

我正在努力寻找一个不依赖 Spring 或类似的东西的答案。

我维护一个 Java 库,它提供了远离服务器的抽象,该库是使用 maven 构建的。为了定义连接详细信息(当前是硬编码的),我想引入一个 .properties 文件以方便自定义,但是我想在 .jar 本身内提供合理的默认值,但允许人们在必要时覆盖特定属性.

我当前的maven结构是这样的......

src/java/com/site/package/cfg/MyLibraryConfig.java
src/resources/com/site/package/cfg/MyLibraryConfig.properties

我目前正在 MyLibraryConfig 类中使用 getResourceAsStream("MyLibraryConfig.properties") 来加载属性文件,并且工作正常。

有没有办法允许使用我的 .jar 的人将文件(例如 MyLibraryConfigOverride.properties)放在我的 .jar 之外,然后拾取并使用该文件?我只想让他们覆盖他们想要的特定属性,而不是整个文件。例如,更改服务器主机名但使用所有标准端口是很正常的。

感谢您的帮助。

最佳答案

我认为我不会尝试覆盖文件,而是硬编码定义我的默认值,并提供通过可选文件覆盖这些默认值的可能性,例如:

Properties data = new Properties();
data.setProperty("a", "sensitive default");
InputStream in = getClass().getResourceAsStream("MyLibraryConfig.properties");
if (in != null) {
data.load(in);
in.close();
}

但是,当然,如果您愿意,也可以将默认值放入文件中。在这种情况下,只需使用不同的名称即可。像这样:

Properties data = new Properties();
InputStream defaults = getClass().getResourceAsStream("defaults.properties");
data.load(defaults);
defaults.close();
InputStream overwrites= getClass().getResourceAsStream("overwrites.properties");
if (overwrites!= null) {
data.load(overwrites);
overwrites.close();
}

这会增加额外的复杂性,您必须决定这是否会为您带来返回。

关于java - 覆盖 .jar 库中包含的 .properties 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28262460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com