有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java重写了一个。属性中包含的属性文件。jar库

我正在努力找到一个不依赖于Spring或任何类似工具的答案

我维护了一个Java库,它提供了一个远离服务器的抽象,这个库是使用maven构建的。为了定义连接细节(目前是硬编码的),我想引入一个。属性文件,以便于自定义,但我希望在中提供合理的默认值。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)放在我的外部。然后拿起并使用哪个罐子?我只希望它们覆盖它们想要覆盖的特定属性,而不是整个文件。例如,更改服务器主机名但使用所有标准端口是很正常的

谢谢你的帮助


共 (1) 个答案

  1. # 1 楼答案

    我想我不会试图覆盖一个文件,而是对我的默认设置进行硬编码,并提供通过可选文件覆盖这些默认设置的可能性,如:

    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();
    }
    

    这增加了额外的复杂性,你必须决定这是否会为你买单