繁体   English   中英

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

[英]Override a .properties file contained within a .jar library

我正在努力寻找不依赖于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();
}

这增加了额外的复杂性,您必须确定这是否能为您带来收益。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM